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'))