2017-02-09 101 views
1

我目前在django的數據庫應用程序中工作。我想使用django-filter爲頁面添加高級過濾功能,但是我發現了一個問題,我希望你能幫助我。Django .filter只顯示第一個對象

爲了說明我的觀點,

Organism.objects.all().filter(lipids=Lipid.objects.all()) 

只返回具有第一脂質對象的生物對象,而不是所有的生物對象的....

更多細節: 比方說,我的型號有: 型號:

class Organism(models.Model): 
    species_name = models.CharField(max_length=200, help_text="Species Name") 
    strain_name = models.CharField(max_length=200, help_text="Strain Name") 
    lipids = models.ManyToManyField('Lipid',blank=True) 

    def __str__(self): 
     return('{}'.format(self.species_name)) 

class Lipid(models.Model): 
    common_name = models.CharField(max_length=100,blank=True) 
    category = models.CharField(max_length=100,blank=True) 
    main_class = models.CharField(max_length=100,blank=True) 

    def __str__(self): 
     return('{}'.format(self.common_name)) 

在Django的殼:

In [1]: from catalog.models import * 
In [2]: o = Organism.objects.all() 
In [3]: l = Lipid.objects.all() 
In [4]: o 
Out[4]: <QuerySet [<Organism: speceies_name_001>, <Organism: speceies_name_002>, <Organism: speceies_name_003>, <Organism: speceies_name_004>]> 
In [5]: l 
Out[5]: <QuerySet [<Lipid: common_name_001>, <Lipid: common_name_002>, <Lipid: common_name_003>, <Lipid: common_name_004>]> 
In [6]: o.filter(lipids=l) 

Out[6]: <QuerySet [<Organism: speceies_name_001>]> 

我期望看到所有的生物[6],因爲我沒有過濾任何東西!
我相信這是一個基本的東西我失蹤,但無法弄清楚!

+0

所以你基本上想要所有的有機體與他們有關聯的脂質? – karthikr

+0

是的,其實這是對我的問題的簡化,只是爲了表明我的觀點。在這種情況下,我期待看到所有的有機體,因爲我正在過濾所有的脂質......而且它只返回具有第一脂質的有機體......我相信它與脂質成爲一體manytomany field .... –

回答

0

通過執行以下Django的第一個自動選擇作爲關係參數,你想達到什麼(聰明的一)

.filter(lipids=Lipid.objects.all()) 

是繼

.filter(lipids__in=Lipid.objects.all()) 

,但更好的辦法是做以下

.filter(lipids__isnull=False) 
+0

感謝您的快速答案!這解決了我所問的問題,但不幸的是我試圖將這個應用於我真正的問題(與Django過濾器結合),並且它一直在做同樣的事情。我想我會問一個有關所有細節的新問題。 –

+0

新的問題.... https://stackoverflow.com/questions/42148018/django-filter-only-shows-first-object –