Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ManyToManyField排除_Python_Django_Django Models - Fatal编程技术网

Python Django ManyToManyField排除

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

我对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实例。因此,如果:

  • 对象_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
实例。

谢谢!我必须为浪费你的时间道歉,因为否决票表明这是一个非常基本的问题。我确实是以制造机器人为生的,但网络框架对我来说就像一门外语。不客气!哈哈,如果有人在浪费我的时间,那肯定不是你…:-/