Django按变量分组
Posted
技术标签:
【中文标题】Django按变量分组【英文标题】:Django group by with variable 【发布时间】:2016-06-16 20:45:11 【问题描述】: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 转换它,但每次我得到一个错误。
【问题讨论】:
只使用变量:report = qs.values(my_list).annotate(Count('pk'))
【参考方案1】:
如果您有想要的值列表,可以使用*
语法:
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'))
【讨论】:
【参考方案2】:您可能正在寻找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'))
【讨论】:
以上是关于Django按变量分组的主要内容,如果未能解决你的问题,请参考以下文章
按一个变量分组,但对 R 中的所有其他变量(均值)进行汇总()