我目前正在使用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],因为我没有过滤任何东西! 我确信这是我遗漏的基本内容,但无法弄清楚!
答案 0 :(得分:0)
通过以下方式Django自动选择第一个作为关系参数(智能一个)
50
你想要实现的目标是
.filter(lipids=Lipid.objects.all())
但更好的方法是做以下
.filter(lipids__in=Lipid.objects.all())