Как изменить max_length в подклассе django? - PullRequest
1 голос
/ 19 декабря 2009

У меня есть следующая модель в 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", не переопределяя его?

1 Ответ

3 голосов
/ 19 декабря 2009

Ваша реализация полностью неверна, это не то, как вы предполагаете написать родительский и дочерний класс. либо определите имя в родительском классе, либо в дочернем классе, если вы определите его в родительском классе, вы не сможете снова определить его в дочернем классе, потому что вместо этого будет создано новое поле. поэтому, если вы хотите изменить max_length в дочернем элементе, я бы порекомендовал объявить name в дочернем элементе, чтобы любой класс, который наследовал от узла, установил свое собственное имя со своей собственной max_length.

правильная реализация

class Node(models.Model):
    #other class attributes

дочерний класс должен наследовать родительские атрибуты и добавлять свои собственные вещи.

class Thingy(Node):
    name       = models.CharField(max_length=100)
    otherstuff = models.CharField(max_length=255)

теперь, когда вы делаете запрос, вы получаете только одно имя вместо двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...