[英]annotating by one-to-many relationship in Django
假设我有这两个模型:
class Test1:
...........
class Test2:
test1 = models.ForeignKey(Test1, related_name = 'tests')
isCompleted = models.BooleanField()
我想做这个查询:
queryset = Test1.objects.annotate(is_completed = ExpressionWrapper(Q(tests__isCompleted = True ),output_field = BooleanField()))
当然,当我这样做时,这给了我一个 None :
queryset[0].tests.first().is_completed
我要做的是检查是否只有一个相关tests
(与 Test1 相关的对象)具有值为True
的isCompleted
字段。 所以我的问题是这样做的正确方法是什么?
如果您有一个Test1
实例(例如,保存为test1
)并且您只想知道该实例是否有任何与isCompleted
相关的Test2
,您可以这样做:
Test2.objects.filter(isCompleted=True, test1=test1.id).exists()
这将返回 boolean 是否存在与您的Test1
相关的isCompleted = True
的Test2
。
如果你想要的是获得所有Test1
至少有一个相关的Test2
与isCompleted = True
,你可以这样做:
Test1.objects.filter(tests__isCompleted=True).distinct()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.