Использование наследования несколькими столами, у меня есть две модели:Джанго добавление `choices` в унаследованной поле модели
class Bird(models.Model):
color = models.CharField()
class Bluebird(Bird):
...
Используя эти модели, я могу это сделать:
birds = Bird.objects.all()
for bird in birds:
print bird.color
Это супер просто, но я не люблю позволять людям определять произвольные значения цвета в некоторых случаях. Например, я хочу, чтобы пользователи не создавали объекты Bluebird
, для которых поле цвета установлено на все, кроме "blue"
или, в более редких случаях, "grey"
или "brown"
. Другими словами, я хочу установить choices
kwarg на унаследованное поле color
из модели Bluebird
. Из беглого интернет-поиска кажется, что Django в настоящее время не позволяет подклассам модели переопределять поля родителя.
Как сохранить доступ к полю color
в родительском классе при определении приемлемого выбора в дочернем?
EDIT: Этот вопрос фокусируется на Django < 1.8. В 1.8 была добавлена возможность передать вызываемый для поля choices
kwarg, и хотя это было бы неплохо, я имею дело с системой, которая еще не обновлена, и обновление в настоящее время не является вариантом.
Простой подход может заключаться в том, чтобы оставить «цвет» самостоятельно и просто сделать это с помощью валидации. (То есть, пользователь может выбрать что-то другое, чем 'blue', но проверка отклонит его как недопустимый вариант.) –
Хотя это будет держать данные действительными, в результате пострадает пользовательский опыт. В худшем случае (т. Е. У них нет самой туманной идеи, какие цвета могут быть у определенного вида птицы), они будут сведены к угадыванию, если действительные варианты не будут представлены им формой. Представление параметров путем переопределения поля ModelForm в настоящее время является тем, как я приближаюсь к этой проблеме. – user3934630