我对Django很新,大部分时间都是C人(嵌入式/ Linux),所以我为自己的无知而道歉。我试过这个确切的查询而没有运气。
我有两个模型,每个模型都有一个指向相同第三个模型的多对多字段。第三种模式代表了某种限制。
class Restriction(models.Model):
...
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
class ClassB(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
我预计会有一个ClassA实例(称之为object_a)。我想找到所有不包含object_a中任何限制的ClassB实例。它看起来像这样:
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
def get_valid_b_objects():
return ClassB.objects.exclude(restrictions__in=self.restrictions)
但这感觉不对。同样,如果ClassB对象中的任何限制也在我的ClassA对象中,那么应该从查询中排除该ClassB实例。所以,如果:
然后object_a.get_valid_b_objects()
应返回object_b4,object_b5和object_b6。
非常感谢你。如果已经解决了这个问题,请随时向我提出另一个答案。
答案 0 :(得分:3)
你有什么应该工作。只需确保使用实际的QuerySet
,而不是相关的经理:
# don't forget '.all()'
return ClassB.objects.exclude(restrictions__in=self.restrictions.all())
这将排除任何B
个实例限制的A
个实例。