【问题标题】:Django group by with variableDjango按变量分组
【发布时间】: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'))

标签: python django python-2.7 django-queryset


【解决方案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'))
    

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 2017-02-14
      • 2013-08-31
      • 2013-10-30
      • 1970-01-01
      • 2017-02-14
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多