Как вы расширяете подключаемое приложение Django? - PullRequest
6 голосов
/ 07 ноября 2010

Допустим, я использую приложение django-tagging и решил, что хочу добавить класс формы к существующим формам тегирования. Я не хочу вставлять форму в существующий файл forms.py, так как он будет удален при обновлении. Как расширить файл forms.py, включив в него мой класс форм?

Я попытался добавить папку «tagging» в мое приложение с помощью forms.py, который включал только мой класс, но нарушал классы форм установленного приложения. (Я знаю, что это был длинный выстрел, просто подумал, что попробую).

Есть предложения о том, где искать информацию о добавлении класса формы в существующее приложение?

Ответы [ 2 ]

5 голосов
/ 31 августа 2014

Простой ответ: вы наследуете от классов форм, создаете свои собственные модификации и используете свою модифицированную версию.

Таким образом, вместо импорта из taggit, вы импортировали бы из своего собственного forms.py

Я делал это много раз, когда хочу украсить / улучшить функциональность существующего приложения.Недостатком является то, что если документация оставляет желать лучшего, вам нужно покопаться в источнике, чтобы узнать, что такое стек вызовов и дерево наследования для функциональности, которую вы хотите изменить.

Недостатком этого подхода является то, что выне может изменить поведение добавленного приложения.Поэтому, если вы хотите, чтобы некоторые внутренние функции taggit использовали ваш собственный код - это сложно реализовать.Однако это очень редкий случай.

Если вы действительно хотите сделать это (как я должен был сделать один раз), вы можете клонировать источник и сохранить свою собственную копию.Создайте ветку с вашими модификациями и убедитесь, что вы пишете хорошие тесты.

Затем вы должны добавить этот код в ваш проект django как его собственное приложение;из-за правил поиска Python - он найдет вашу локальную копию и будет использовать ее вместо той, что находится в глобальном каталоге site-packages.

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

2 голосов
/ 08 ноября 2010

Джейкоб Каплан-Мосс, первоначальный разработчик Django, отвечает на ваш вопрос в аннотации (поскольку ваш вопрос был абстрактным в первую очередь) на страницах 185–203 своей презентации «Django In the Реальный мир."

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

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