繁体   English   中英

通过 Django 中的一对多关系进行注释

[英]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 相关的对象)具有值为TrueisCompleted字段。 所以我的问题是这样做的正确方法是什么?

如果您有一个Test1实例(例如,保存为test1 )并且您只想知道该实例是否有任何与isCompleted相关的Test2 ,您可以这样做:

Test2.objects.filter(isCompleted=True, test1=test1.id).exists()

这将返回 boolean 是否存在与您的Test1相关的isCompleted = TrueTest2

如果你想要的是获得所有Test1至少有一个相关的Test2isCompleted = True ,你可以这样做:

Test1.objects.filter(tests__isCompleted=True).distinct()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM