我对 Django 很陌生,大部分时间都是 C 语言(嵌入式/Linux),所以我为我的无知道歉。我尝试搜索这个确切的查询,但没有成功。
我有两个模型,每个模型都有一个指向同一个第三个模型的多对多字段。第三种模型代表了某种限制。
class Restriction(models.Model):
...
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
class ClassB(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
Run Code Online (Sandbox Code Playgroud)
我预计会有一个 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)
Run Code Online (Sandbox Code Playgroud)
但这感觉不对。同样,如果 ClassB 对象中的任何限制也存在于我的 ClassA 对象中,则应从查询中排除该 ClassB 实例。因此,如果:
然后object_a.get_valid_b_objects()应该返回object_b4、object_b5和object_b6。 …