小编kof*_*dog的帖子

Django ManyToManyField 排除

我对 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 包含限制 1、2 和 3
  • object_b1 包含限制 2、4 和 5
  • object_b2 包含限制 1 和 2
  • object_b3 包含限制 1、2、3、4 和 5
  • object_b4 包含限制 4 和 5
  • object_b5 包含限制 5
  • object_b6 不包含任何限制

然后object_a.get_valid_b_objects()应该返回object_b4、object_b5和object_b6。 …

python django django-models

5
推荐指数
1
解决办法
3061
查看次数

标签 统计

django ×1

django-models ×1

python ×1