2015-06-06 184 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'))