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 中的所有其他变量(均值)进行汇总()

如何在变量分组值上按分组显示 s-s-rS 中的行数?

按嵌套 tibble 中作为字符串向量给出的变量对 tibble 进行分组

按一个变量排序,按另一个分组,然后在 R 中的 SQL Query 中选择第一行