基于模型的 __str__ 的 django 过滤查询集

jef*_*ind 2 python django filter django-queryset

我有以下模型:

class Subspecies(models.Model):
    species = models.ForeignKey(Species)
    subspecies = models.CharField(max_length=100)

    def __str__(self):
        return self.species.species_english+" "+self.species.species+" "+self.subspecies

    def __unicode__(self):
        return self.species.species_english+" "+self.species.species+" "+self.subspecies
Run Code Online (Sandbox Code Playgroud)

请注意,species__str____unicode__方法中使用了 ForeignKey 字段。我做了这个过滤器查询:

l = list(Subspecies.objects.filter(subspecies__contains=request.GET.get('term')).order_by('subspecies')[:10])
Run Code Online (Sandbox Code Playgroud)

这几乎是我想要的,除了不完全是。我真正想要的是一个过滤器,它检查__str__对象的表示是否包含某些字符组,而不仅仅是检查subspecies字段。而不是subspecies__contains=...它会是类似__str____contains=...但当然行不通的东西。

这可能吗?如果是这样,我将如何进行此查询?

谢谢!

And*_*vov 5

过滤器生成要在数据库中执行的查询。

__str__在 Python 解释器中运行。你不能从 DB 调用它。所以简短的回答是“不,你不能”。例如,您必须使用filter内置函数手动过滤它。