基于__str__模型的django过滤器查询集
django filter queryset based on __str__ of model
我有以下型号:
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
请注意外键字段 species
用于 __str__
和 __unicode__
方法。我做了这个过滤器查询:
l = list(Subspecies.objects.filter(subspecies__contains=request.GET.get('term')).order_by('subspecies')[:10])
这几乎就是我想要的,只是不完全是。我真正想要的是一个过滤器,它检查对象的 __str__
表示是否包含一些字符组,而不是仅仅检查 subspecies
字段。而不是 subspecies__contains=...
它会像 __str____contains=...
但当然那是行不通的。
这可能吗?如果可以,我将如何进行此查询?
谢谢!
过滤器生成要在数据库中执行的查询。
__str__
在 Python 解释器中是 运行。你不能从数据库中调用它。
所以简短的回答是 "no, you can't"。您必须手动过滤它,例如使用 filter
内置函数。
我在这里找到的最佳方法是用引号 (' ') 标记您的目标。然后根据它对字符串进行切片和过滤..这是你的情况
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+" "+" 'str(self.subspecies)'"
def __unicode__(self):
return self.species.species_english+" "+self.species.species+" "+" 'str(self.subspecies)'"
如您所见,您的 subspecies
部分现在位于“ ”
之间
然后你根据它做下一步过滤:
sub_input = request.GET.get('term')
sub = sub_input .split("'")[1::2] #not sure how did [1::2] works but it is the only way that worked for me
l = Subspecies.objects.filter(subspecie=sub[0]) #used indexing as split gives you result as a list
我有以下型号:
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
请注意外键字段 species
用于 __str__
和 __unicode__
方法。我做了这个过滤器查询:
l = list(Subspecies.objects.filter(subspecies__contains=request.GET.get('term')).order_by('subspecies')[:10])
这几乎就是我想要的,只是不完全是。我真正想要的是一个过滤器,它检查对象的 __str__
表示是否包含一些字符组,而不是仅仅检查 subspecies
字段。而不是 subspecies__contains=...
它会像 __str____contains=...
但当然那是行不通的。
这可能吗?如果可以,我将如何进行此查询?
谢谢!
过滤器生成要在数据库中执行的查询。
__str__
在 Python 解释器中是 运行。你不能从数据库中调用它。
所以简短的回答是 "no, you can't"。您必须手动过滤它,例如使用 filter
内置函数。
我在这里找到的最佳方法是用引号 (' ') 标记您的目标。然后根据它对字符串进行切片和过滤..这是你的情况
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+" "+" 'str(self.subspecies)'"
def __unicode__(self):
return self.species.species_english+" "+self.species.species+" "+" 'str(self.subspecies)'"
如您所见,您的 subspecies
部分现在位于“ ”
然后你根据它做下一步过滤:
sub_input = request.GET.get('term')
sub = sub_input .split("'")[1::2] #not sure how did [1::2] works but it is the only way that worked for me
l = Subspecies.objects.filter(subspecie=sub[0]) #used indexing as split gives you result as a list