Django manytomany过滤器(关系=无或排除,如果任何关系= x)

时间:2016-04-03 13:52:27

标签: python django django-queryset django-q

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

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

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)将只匹配另一个位置。

有人可以帮忙吗?

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

这似乎可以胜任......

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

需要仔细查看sql输出以查询查看确切的内容。

感谢它没有花费比我想象的更长的时间并且不复杂。