我目前正在django中的一个数据库应用程序中工作。我想使用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-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>]>我希望看到out6中的所有生物,因为我没有过滤任何东西!
我确信这是我错过的一件基本的事情,但我想不出!
发布于 2017-02-09 22:33:47
通过执行以下操作,Django自动选择先作为关系参数(智能参数)
.filter(lipids=Lipid.objects.all())你想要达到的目标是
.filter(lipids__in=Lipid.objects.all())但更好的方法是做以下工作
.filter(lipids__isnull=False)https://stackoverflow.com/questions/42148018
复制相似问题