2016-04-03 67 views
0

好吧,所以我有一個位置和菜單選項的模型和它們之間的多對多關係。Django manytomany過濾要麼(關係=無或排除,如果任何關係= x)

我想要做的是顯示菜單選項,但尚未附加到該位置。所以,我沒有這個..

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)會只是匹配其他位置。

任何人都可以幫忙嗎?

我相信這一定是可能的,但我認爲它的一部分可能不會或解決方案可能需要不必要的複雜。

謝謝。

回答

0

好吧,所以我找到了解決方案。

這似乎做的工作......

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

將需要有一個看看SQL輸出接近的查詢,看看到底發生了什麼事情。

感謝,它並沒有花費比我想象的更長的時間,也不復雜。 phew