2016-08-14 45 views
1

描述: - 我想過濾所有作者爲john & paul的條目。以下是我正在使用的模型。任何人都可以解決這個問題:如何爲在Django中具有多個值的多對多屬性的模型創建過濾器查詢集

class Blog(models.Model): 
    name = models.CharField(max_length=100) 
    tagline = models.TextField() 

    def str__(self):    # unicode__ on Python 2 
    return self.name 

class Author(models.Model): 
    name = models.CharField(max_length=200) 
    email = models.EmailField() 

    def str__(self):    # unicode__ on Python 2 
     return self.name 

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 
    headline = models.CharField(max_length=255) 
    body_text = models.TextField() 
    pub_date = models.DateField() 
    mod_date = models.DateField() 
    authors = models.ManyToManyField(Author) 
    n_comments = models.IntegerField() 
    n_pingbacks = models.IntegerField() 
    rating = models.IntegerField() 

    def str__(self):    # unicode__ on Python 2 
     return self.headline 
+0

'Entry.objects.filter(authors__in = [Author.objects.get( name ='John'),Author.objects.get(name ='Paul')])。distinct()' –

+0

這是不可能的。我們希望所有這些作者都在那裏。 –

+0

@BurhanKhalid你爲什麼把問題標記爲已經存在。如果它已經存在,你可以在這裏給出正確的答案。 –

回答

0

只是過濾兩次(如@ dnit13說)。它的唯一途徑

Entry.objects.all().filter(authors__name='john').filter(authors__name='paul') 

如果作者的名單是動態的:

authors = ['john', 'paul'] 
entries = Entry.objects.all() 
for author in authors: 
    entries = entries.filter(authors__name=author) 
+0

我已經嘗試過這種方法,但是我們仍然不會得到所有這些作者都在那裏的條目。 –

0

只需使用過濾器兩次

Entry.objects.filter(authors__name='john').filter(authors__name='paul') 
+0

我不喜歡這種方式,好像會有更多的作者,那麼我們的查詢會很長。所以我們需要一些其他具體的方法來解決這樣的查詢。但仍然謝謝你的答案。 –

+0

另一種方式是使用Q對象,我懷疑它會適用於這種情況 – dnit13

+0

由於Q對象主要用於使用OR操作的複雜查詢,因此無法在此處工作。 –