Python Django ManyToManyField排除
我对Django很陌生,在很大程度上是一个C语言的人(嵌入式/Linux),所以我为我的无知道歉。我尝试过搜索这个精确的查询,但没有成功 我有两个模型,每个模型都有一个指向同一个第三个模型的多对多字段。第三种模式代表了某种限制Python Django ManyToManyField排除,python,django,django-models,Python,Django,Django Models,我对Django很陌生,在很大程度上是一个C语言的人(嵌入式/Linux),所以我为我的无知道歉。我尝试过搜索这个精确的查询,但没有成功 我有两个模型,每个模型都有一个指向同一个第三个模型的多对多字段。第三种模式代表了某种限制 class Restriction(models.Model): ... class ClassA(models.Model): ... restrictions = models.ManyToManyField(Restriction) cl
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实例。因此,如果:
- 对象_a包含限制1、2和3
- 对象_b1包含限制2、4和5
- 对象_b2包含限制1和2
- 对象_b3包含限制1、2、3、4和5
- 对象_b4包含限制4和5
- 对象_b5包含限制5
- 对象_b6不包含任何限制
object\u a.get\u valid\u b\u objects()
应该返回object\u b4、object\u b5和object\u b6
多谢各位。如果已经解决了这个问题,请随时告诉我另一个答案。你所拥有的应该有用。只需确保您使用的是实际的
查询集,而不是相关的管理器:
# don't forget '.all()'
return ClassB.objects.exclude(restrictions__in=self.restrictions.all())
这将排除任何受A
实例限制的B
实例。谢谢!我必须为浪费你的时间道歉,因为否决票表明这是一个非常基本的问题。我确实是以制造机器人为生的,但网络框架对我来说就像一门外语。不客气!哈哈,如果有人在浪费我的时间,那肯定不是你…:-/