选项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和查询集对象的值,每个都包含MyModelwith的条目interesting_field=a value
from value_list。
笔记:
存在这个库django-group-by,它声称group_by()在 Django 上添加一个你可能想要检查的。