У меня есть следующая модель в Джанго:Как изменить max_length в подклассе django?
class Node(models.Model):
name = models.CharField(max_length=255)
И этот подкласс выше модели:
class Thingy(Node):
name = models.CharField(max_length=100)
otherstuff = models.CharField(max_length=255)
Проблема с этой установки является то, что в то время как все просто работает, заглянуть в шоу базы данных что syncdb создал две таблицы. Один из них называется appname_node
с колонкой name
, а другой - appname_thingy
с двумя колонками: name
и otherstuff
. Когда создается новый объект, значение name
копируется в обе таблицы ... не очень классно, если вы копаете всю концепцию нормализации :-)
Может кто-нибудь объяснить мне, как я могу изменить значение max_length Свойство «name» в «Thingy» без переопределения?
Mohamed - это правильно. Прочтите http://docs.djangoproject.com/en/dev/topics/db/models/#id5. В зависимости от специфики вашей проблемы вы можете рассмотреть использование абстрактных базовых классов в отличие от истинного многозначного наследования. –
Извините, я сохранил некоторые вещи, чтобы упростить вопрос - для начала родительская модель не может быть абстрактной, поскольку в ней есть ограничения внешнего ключа. Что касается изменения max_length в дочернем элементе, сохраняя свойство в родительском, вы оба говорите мне, что Django не поддерживает переопределение атрибутов свойства из родителя? Значение «имя» должно оставаться в родительском. Это распространено во всех детских моделях, и слишком много других общих свойств, которые должны существовать у этого ребенка. Если я не могу изменить этот атрибут, мне придется в основном скопировать «узел» :-( –
Да, django рассматривает каждый класс модели как таблицу базы данных. – Mohamed