【问题标题】:Django manytomany filter either (relations=none or exclude if any relation=x)Django manytomany 过滤器(关系=无或排除,如果有关系=x)
【发布时间】:2016-07-23 00:37:12
【问题描述】:

好的,所以我有一个位置和菜单选项的模型以及它们之间的多对多关系。

我想做的是显示尚未附加到该位置的菜单选项。所以我就这么做了。。

options = Options.objects.exclude(location=location_pk)

但是,这会导致当前没有任何位置关系的菜单选项不会出现在列表中。

我想做的是这两者的结合:

Options.objects.filter(location=None)
Options.objects.exclude(location=location_pk)

我试过了……

options = options.filter(Q(location=None) | ~Q(location=location_pk))

...但是当一个选项有多个位置时,~Q(location=location_pk) 将与另一个位置匹配。

有人可以帮忙吗?

我确信这一定是可能的,但我的一部分认为它可能不是,或者解决方案可能需要不必要地复杂。

谢谢。

【问题讨论】:

    标签: python django django-queryset django-q


    【解决方案1】:

    好的,所以我找到了解决方案。

    这似乎完成了这项工作......

    Option.objects.exclude(~Q(location=None) & Q(location=location_pk))
    

    需要仔细查看查询的 sql 输出,以了解发生了什么。

    感谢它没有比我想象的要花更长的时间来弄清楚并且并不复杂。

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2021-11-19
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多