选项1:
尽管 Django 中不存在 a ,但您也可以尝试使用方法和用户过滤器来group_by()
检索每个用户最近关闭的发票:latest()
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.latest('created')
对于旧版本的 Djangolatest()
不存在,查询将如下所示:
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.order_by('-created')[0]
选项 2:
更新:从那时起,我在这里添加了一个问答样式示例:如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?这显示了如何GROUP BY
在 Django ORM 上模拟操作。
如果您绝对想创建 a 的效果group_by
,那么您可以手动创建一个,如此处接受的答案所示:Django GROUP BY field value。
使用.values_list()
withflat=True
获取数据库中现有值的列表(如果您事先不知道它们)。也用于.distinct()
消除重复值,因为我们不关心那些:
value_list = MyModel.objects.values_list(
'interesting_field', flat=True
).distinct()
现在遍历value_list
并填写您的字典:
group_by_value = {}
for value in value_list:
group_by_value[value] = MyModel.objects.filter(interesting_field=value)
现在group_by_value
字典包含你的不同值作为键interesting_field
和查询集对象的值,每个都包含MyModel
with的条目interesting_field=a value
from value_list
。
笔记:
存在这个库django-group-by,它声称group_by()
在 Django 上添加一个你可能想要检查的。