Django 分组依据变量
Django group by with variable
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
report = qs.values('month', 'location').annotate(Count('pk'))
在这个例子中,我想通过变量传递值,在前面的几行中,我有一些 if 并且取决于它,我需要根据我的结果进行分组。
而不是 'month','location' 应该有像 my_list 这样的变量。我尝试用 join 和 map 转换它,但每次都会出错。
如果您有所需值的列表,您可以使用 *
语法:
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
value_list = ['month', 'location']
report = qs.values(*value_list).annotate(Count('pk'))
您可能正在寻找 unpacking。如果一个函数需要单独的参数,而你在列表或元组中有这些参数,你应该使用 *
将值解包为单独的。对于字典的情况,有类似的语法 **
。
在你的情况下,尝试:
my_list = ['month', 'location']
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
report = qs.values(*my_list).annotate(Count('pk'))
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
report = qs.values('month', 'location').annotate(Count('pk'))
在这个例子中,我想通过变量传递值,在前面的几行中,我有一些 if 并且取决于它,我需要根据我的结果进行分组。 而不是 'month','location' 应该有像 my_list 这样的变量。我尝试用 join 和 map 转换它,但每次都会出错。
如果您有所需值的列表,您可以使用 *
语法:
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
value_list = ['month', 'location']
report = qs.values(*value_list).annotate(Count('pk'))
您可能正在寻找 unpacking。如果一个函数需要单独的参数,而你在列表或元组中有这些参数,你应该使用 *
将值解包为单独的。对于字典的情况,有类似的语法 **
。
在你的情况下,尝试:
my_list = ['month', 'location']
truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
report = qs.values(*my_list).annotate(Count('pk'))