有2种型号
class A(models.Model):
name = models.TextField()
class B(models.Model):
a = models.ForeignKey(A)
status = models.BooleanField(default=False)
现在,我要根据B类状态下的最后数据过滤A类对象。
如果有两个B型数据
id | a | status
1 | a | True
2 | abc | False
3 | a | False
4 | abc | True
因此,如果我要过滤状态为False的模型A的对象。 在这种情况下,它将给我
a
。
如果我想过滤状态为True的模型A的对象。
在这种情况下,它应该还给我
abc
。
我想写一个类似的查询
A.objects.filter(b__status__last=True)
是否可以使用过滤器?
答案 0 :(得分:3)
我认为您可以在此处有效使用注释。
inner join
在这里,我们为A.objects.annotate(latest_b=Max("b__created_at")).filter(b__status=True).latest('latest_b')
的每个对象添加了一个A
字段,然后按b的状态过滤后获取最新的对象。这应该可以正常工作。
答案 1 :(得分:2)
请尝试:
from django.db.models import Max, F
A.objects.annotate(latest=Max('b__id')).filter(b__id=F('latest'),b__status=True)