首先抱歉我的英语不好。
我必须过滤查询但使用外键属性。我有一个WorkOrder模型,并有其他模型与订单移动。
这是模型
class OrderMovements(models.Model):
workorder = models.ForeignKey(
WorkOrder,
verbose_name=_('order'),
)
status = models.IntegerField(
choices=FULL_CHOICES,
default=1,
verbose_name=_('status'),
)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
就像你看到一个工单可以有很多动作一样,我需要做的查询集是一个查询,它将最后10个具有状态为3或4的OrderMovement的WorkOver包含在其中的任何一个动作中工作单。
我真的不知道如何做到这一点。
希望你能理解我。谢谢!
答案 0 :(得分:2)
像往常一样,你从你想要的模型开始,并通过双下划线跟踪关系。
WorkOrder.objects.order_by('-timestamp').filter(ordermovements__status__in=[3, 4])[:10]
答案 1 :(得分:1)
首先使用related_name
轻松执行反向关系查找
class OrderMovements(models.Model):
workorder = models.ForeignKey(
WorkOrder,
related_name='ordermovements',
verbose_name=_('order'),
)
// rest code
然后,您可以查询工作订单并使用related_name进行反向关系过滤。
您还需要distinct
以避免重复
您的查询应该是:
WorkOrder.objects.order_by('-timestamp').filter(
ordermovements__status__in=[3, 4]).distinct('-timestamp')[:10]