Как переопределить модели, определенные в установленных приложениях в Django? - PullRequest
8 голосов
/ 25 ноября 2010

Можно ли переопределить модель, используемую в INSTALLED_APP, без изменения рассматриваемого приложения?Например, в django-basic-blog есть модель Post, в которую я хотел бы добавить поле.Я мог бы редактировать django-basic-blog напрямую, но для переносимости кода я хотел бы построить поверх него.Я не хочу создавать подклассы, поскольку хочу сохранить все существующие ссылки на модель Post.Заранее спасибо!

1 Ответ

12 голосов
/ 25 ноября 2010
  1. Если вы создадите подкласс, исходные поля будут по-прежнему сохранены в исходной таблице, поэтому ссылки останутся действительными.

  2. Если вы хотите сделать обезьянь-патчСуществующий класс, который по большей части не является рекомендуемым грязным методом, вы можете использовать contribute_to_class в каком-то файле models.py, который будет загружен в приложение после того, который вы хотите изменить:

models.py:

from django.db.models import CharField
from blog.models import Post
CharField(max_length="100").contribute_to_class(Post, 'new_field')

Если вы делаете это так, вы всегда должны нести риск того, что ваши изменения могут столкнуться с другими частями кода и что ваш код будет сложнее поддерживать!

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