首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django .filter只显示第一个对象

Django .filter只显示第一个对象
EN

Stack Overflow用户
提问于 2017-02-09 22:24:17
回答 1查看 268关注 0票数 1

我目前正在django中的一个数据库应用程序中工作。我想使用django-filter向页面添加高级过滤器功能,但是我发现了我的方法中的一个问题,我希望您能帮助我。

为了说明我的观点,

代码语言:javascript
复制
Organism.objects.all().filter(lipids=Lipid.objects.all())

只是返回有第一个脂肪对象的有机体对象,而不是所有的有机体对象.

更多细节:假设我的模型是:模型:

代码语言:javascript
复制
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-shell中:

代码语言:javascript
复制
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>]>

我希望看到out6中的所有生物,因为我没有过滤任何东西!

我确信这是我错过的一件基本的事情,但我想不出!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-09 22:33:47

通过执行以下操作,Django自动选择先作为关系参数(智能参数)

代码语言:javascript
复制
.filter(lipids=Lipid.objects.all())

你想要达到的目标是

代码语言:javascript
复制
.filter(lipids__in=Lipid.objects.all())

但更好的方法是做以下工作

代码语言:javascript
复制
.filter(lipids__isnull=False)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42148018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档