我一直试图在一个简单的模型上过滤一个查询集,但到目前为止还没有运气。
这是我的模型:

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'])

09-07 02:28