Наследование класса модели Django - поля и переопределения по умолчанию - PullRequest
0 голосов
/ 15 февраля 2011

Я пытаюсь унаследовать шаблоны классов, чтобы у всех моих моделей были определенные поля по умолчанию, и у всех были переопределения по умолчанию для нескольких функций, таких как save_model ()

Если я делаю это так, яполучить переопределения, но затем придется пойти и вручную установить метаданные, такие как db_table ...

class ModelExtension(models.Model):
    altered_by = models.CharField(max_length=64)

class SomeModel(ModelExtension):
    class Meta:
        db_table = 'app_somemodel'
    fields = models.CharField()
    ...

Есть ли способ заставить этот тип наследования работать правильно?До сих пор мне либо приходится выполнять дополнительную работу, чтобы компенсировать недостатки этого подхода, либо меня мучают ошибки MRO.2

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

Что такое ошибка MRO? Вы читали документы Django о наследовании моделей? У вас могут быть абстрактные базовые классы, наследование нескольких таблиц или модели прокси.

http://docs.djangoproject.com/en/1.2/topics/db/models/#abstract-base-classes

То, что вы сделали, - это наследование нескольких таблиц - есть скрытый OneToOneField, соединяющий ваши две модели. Я не знаю, почему вы думаете, что вам нужна указанная db_table - это не должно быть.

Если у вас никогда не будет объектов голого класса ModelExtension, вам нужны абстрактные базовые классы. В этом случае вы помещаете abstract = True в раздел Meta, а затем все поля из базового класса добавляются в таблицу для дочернего класса. Документы объясняют это лучше, чем я могу здесь.

Я часто начинаю делать это одним способом, а затем переворачиваться взад-вперед несколько раз, когда я больше думаю о структуре своей базы данных ...

0 голосов
/ 15 февраля 2011

Если вы просто хотите добавить новую функциональность в модель без изменения ее полей, используйте прокси-модель !

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