2013-05-16 36 views
1

我(簡化)模型是這樣的:django高效的方式來結合2個查詢或複合?

class Story(models.Model): 
    wikiedit = models.BooleanField(default=False) 
    writers = models.ManyToManyField(User,null=True,blank=True) 
class Writer(models.Model): 
    user = models.OneToOneField(User) 

現在我想建立一個查詢集,其中包括滿足所有的故事:wikiedit = True or user in writers

所以,我的觀點裏我提出兩個疑問:

wikistories = Story.objects.filter(wikiedit=True) 
writerstories = request.user.objects.story_set.filter 

但我想只用一個數據庫就可以做到這一點。我想這會更有效率。如果在操作者在某種意義上,這M2M關係支持我找不到:

Story.objects.filter(writers__contains=request.user) #but this is a TypeError 

也許只是更有效地使2個查詢集,然後在列表中加入他們的行列,但很想有它的一個。

任何線索?謝謝!

回答

2

要檢查M2M關係,你只是做=,不contains

Story.objects.filter(writers=request.user) 

你也可以使用Q對象做一個or查詢:

Story.objects.filter(Q(wikiedit=True) | Q(writers=request.user)) 
+0

太棒了!它的工作,可能是一個太基本的問題,但我沒有設法找到這個信息幾個小時!對於更多讀者來說,這可能包括重複的結果,它們可能被排除在外: 'Story.objects.filter(qwriters |(qwiki&〜qwriters))'其中qwriters和qwiki是相應的Q對象。謝謝! – viridis