我一直试图在一个简单的模型上过滤一个查询集,但到目前为止还没有运气。
这是我的模型:
class Country(models.Model):
COUNTRY_CHOICES = (
('FR', _(u'France')),
('VE', _(u'Venezuela')),
)
code = models.CharField(max_length=2, choices=COUNTRY_CHOICES)
def __unicode__(self):
return self.get_code_display()
我想做如下的事情:
Country.objects.filter(get_code_display__icontains="france")
Country.objects.filter(code__display__icontains="france")
Country.objects.filter(get_code_display__icontains="france")
但是上面的这些都不起作用。如何对具有
choices
属性的字段进行筛选?我以为被覆盖的会有帮助,但我想我遗漏了一些东西。 最佳答案
你不能这样做。filter
在数据库级别工作,数据库对您的长名称一无所知。如果要对值进行筛选,则需要将该值存储在数据库中。
另一种方法是将值转换回代码,并对其进行过滤:
country_reverse = dict((v, k) for k, v in COUNTRY_CHOICES)
Country.objects.filter(code=country_reverse['france'])