2015-03-02 2 views
1

Можно ли фильтровать модели по понятным для человека значению?Модели Django фильтруют по человеко-читаемому значению

#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 

Это возвращает провинции, чья страна Испания, но как я могу сделать то же самое только с помощью фильтрации «Испания» вместо «СП»?

ответ

2

Невозможно. Имена стран не хранятся нигде в БД. Поэтому вы должны получить значение страны из отображаемого имени и фильтровать по ней:

countries = dict((v, k) for k, v in World.COUNTRY_CHOICES) 
provinces = self.filter(country=countries['Spain']) 
Смежные вопросы