2015-06-06 136 views
0

反向关系,如果我有两个型号过滤查询集与在Django

class ModelA(models.Model): 
    pass 

class ModelB(models.Model): 
    model_a = models.ForeignKey(ModelA, related_name="children") 
    status = models.IntegerField() 
    date = models.DateTimeField() 

我可以得到ModelA.objects.children.latest('date')最新ModelB对象,但我也可以过滤我MODELA查询集对领域中最新的ModelB对象?我的意思是这样

ModelA.objects.filter(ModelA.objects.children.latest('date')['status']=1) 

ModelA.objects.filter(latest_children__status=1) 

我知道这个代码不会工作,但我希望它说明了我想要的东西。

+0

您是否试图获得映射到最新'ModelA'对象的'ModelB'对象? – nu11p01n73R

+0

我希望那些ModelA对象具有status = 1的最新ModelB子对象。如果ModelA是Order且ModelB是Status,我将使用它来获取那些current_state/latest_state状态为1的订单。 – Jamgreen

回答

0

你可以做到这一点

ModelA.objects.filter(children__status=1).latest('children__date') 

过滤器的对象,然后第一个获得最新的。

+0

但我不想返回最新的对象。我想要一个包含ModelA对象的查询集,它们的最新子对象的状态等于1 – Jamgreen

0

不知道这是否会起作用,但试试看。

ModelA.objects.filter(children__status=1)\ 
    .annotate(last_date=Max('children__date'))\ 
    .filter(children__date=F('last_date'))