Django模型按人类可读的值进行过滤

时间:2015-03-02 11:56:54

标签: python django django-models django-managers

是否可以按人类可读的值过滤模型?

#models.py
class World(models.Model):
    COUNTRY_CHOICES = (('SP', 'Spain'), ('FR', 'France'))
    country=models.CharField(max_length=20, choices=COUNTRY_CHOICES, default=None)
    province=models.CharField(max_length=20, default=None)

#managers.py
def get_provinces(self):
    provinces = self.filter(country='SP')
    return provinces

这将返回其国家/地区为西班牙的省份,但我如何才能使用'西班牙'而不是' SP'?

1 个答案:

答案 0 :(得分:2)

这是不可能的。国家/地区名称不会存储在DB中的任何位置。因此,您必须从显示名称中获取国家/地区值并按其过滤:

countries = dict((v, k) for k, v in World.COUNTRY_CHOICES)
provinces = self.filter(country=countries['Spain'])