gpt4 book ai didi

mysql - Django 按相关模型字段排序查询集

转载 作者:行者123 更新时间:2023-11-29 02:55:41 26 4
gpt4 key购买 nike

我有以下模型(为清楚起见缩写):

class Order(models.Model):
some fields

class OrderStatus(models.Model):
order = models.ForiegnKey(Order)
status = models.CharField(choices=['ORDERED', 'IN_TRANSIT', 'RECEIVED'])
time = models.DateTimeField()

我想按订单接收时间对包含所有三个 OrderStatuses 的所有订单进行排序。

也就是说,选择有Ordered、In Transit、Received记录的订单,如下:

Order.objects.filter(orderstatus__status=OrderStatus.ORDERED)
.filter(orderstatus__status=OrderStatus.IN_TRANSIT)
.filter(orderstatus__status=OrderStatus.RECEIVED)

... 然后按其相关 OrderStatus 模型的 time 字段对它们进行排序,其中 status=OrderStatus.RECEIVED

这就是我卡住的地方。我已经阅读了有关 .extra() 查询集修饰符和直接 SQL 注入(inject)的 Django 文档,但我仍然不知所措。我可以使用带注释的字段和 Q 对象来实现它,还是我最好走 .extra 路线?

最佳答案

你没有尝试这样做吗?

Order.objects.filter(orderstatus__status=OrderStatus.ORDERED)
.filter(orderstatus__status=OrderStatus.IN_TRANSIT)
.filter(orderstatus__status=OrderStatus.RECEIVED)
.order_by('orderstatus__time')

在我的模型上,它按预期工作 - order_by 根据需要选择最后加入的订单状态。如果你不确定你可以像这样检查真实的查询(在 django shell 中):

from django.db import connection
# perform query
print(connection.queries)

也可以这样做:

OrderStatus.objects.filter(status=OrderStatus.RECEIVED)
.order_by('time').select_related('order')
.filter(order__orderstatus__status=OrderStatus.ORDERED)
.filter(order__orderstatus__status=OrderStatus.IN_TRANSIT)

关于mysql - Django 按相关模型字段排序查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com