我对Django非常陌生,因为我大部分时间都是C类(embedded/Linux),所以我为自己的无知道歉。我已经尝试过搜索这个准确的查询,但没有任何运气。
我有两个模型,每个模型都有一个多到多的字段,指向同一个第三个模型。第三种模式表示某种限制。
class Restriction(models.Model):
...
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
class ClassB(models.Model):
...
restrictions = models.ManyToManyField(Restriction)我希望有一个ClassA实例(称为object_a)。我想找到ClassB的所有实例,这些实例不包含object_a中的任何限制。
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。
非常感谢。如果这个问题已经解决了,请告诉我另一个答案。
发布于 2017-05-28 20:52:01
你所拥有的应该是有用的。只需确保您使用的是实际的QuerySet,而不是相关的管理器:
# don't forget '.all()'
return ClassB.objects.exclude(restrictions__in=self.restrictions.all())这将排除具有B实例的任何限制的任何A实例。
https://stackoverflow.com/questions/44231848
复制相似问题