Django .filter只显示第一个对象

时间:2017-02-09 22:24:17

标签: django django-filter

我目前正在使用django中的数据库应用程序。我想使用django-filter为页面添加高级过滤功能,但我发现我的方法存在问题,希望你能帮助我。

为了说明我的观点,

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

只返回具有第一个Lipid对象的Organism对象,而不是所有的Organism对象.......

更多细节: 我们说我的模型是: 机型:

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中:

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],因为我没有过滤任何东西! 我确信这是我遗漏的基本内容,但无法弄清楚!

1 个答案:

答案 0 :(得分:0)

通过以下方式Django自动选择第一个作为关系参数(智能一个)

50

你想要实现的目标是

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

但更好的方法是做以下

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