首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ManyToManyField除外

Django ManyToManyField除外
EN

Stack Overflow用户
提问于 2017-05-28 20:42:10
回答 1查看 2.3K关注 0票数 5

我对Django非常陌生,因为我大部分时间都是C类(embedded/Linux),所以我为自己的无知道歉。我已经尝试过搜索这个准确的查询,但没有任何运气。

我有两个模型,每个模型都有一个多到多的字段,指向同一个第三个模型。第三种模式表示某种限制。

代码语言:javascript
复制
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中的任何限制。

代码语言:javascript
复制
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包含限制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。

非常感谢。如果这个问题已经解决了,请告诉我另一个答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 20:52:01

你所拥有的应该是有用的。只需确保您使用的是实际的QuerySet,而不是相关的管理器:

代码语言:javascript
复制
# don't forget '.all()'
return ClassB.objects.exclude(restrictions__in=self.restrictions.all())

这将排除具有B实例的任何限制的任何A实例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44231848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档