-
Подскажите, где, с вашей точки зрения, лучше хранить (то есть в каких файлах) следующее:
1) код для своих [custom] полей (ну тут я полагаю прямо в models, почти без вариантов)
2) код для расширения админки. тут имею ввиду код, например, для кастомизации flatpages (добавление, скажем, tinymce). ведь файлы admin.py задаются для конкретного приложения и там положено хранить код, описывающий админ-часть именно этого конкретного приложения.
и поэтому несколько некорректно держать в таком файле (хотя это работает) код наподобие этого:
class TinyMCEFlatPageAdmin(FlatPageAdmin): def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == 'content': return forms.CharField(widget=TinyMCE( attrs={'cols': 80, 'rows': 30}, )) return super(TinyMCEFlatPageAdmin, self).formfield_for_dbfield(db_field, **kwargs) admin.site.unregister(FlatPage) admin.site.register(FlatPage, TinyMCEFlatPageAdmin) -
Код для custom полей обычно хранится в fields.py, чтобы не плодить лишних зависимостей (не забывайте, что обычно при запуске сайта помимо импорта пакетов происходит импорт urlconf-ов, а они иногда импортируют модели).
Общий код лично мы храним в "приложениях" common и/или utils. -
насчет второго: я создал бы отдельное приложение под эту фичу, что-нибудь вроде flatpages_tinymce
мне кажется, что маленькие приложение - это хорошая практика -
Насчет общих приложений - да - как-то позабыл об этом совсем, спасибо.
А по поводу fields.py уточню:
то есть просто рядом с моделями кладу этот файл и импортирую его в models.py? (тут не возникнет ли неприятностей при импорте моделей)
тут ещё пришла в голову мысль - а если поле нужно для нескольких приложений - как лучше тогда? -
Код для custom полей обычно хранится в fields.py, чтобы не плодить лишних зависимостей (не забывайте, что обычно при запуске сайта помимо импорта пакетов происходит импорт urlconf-ов, а они иногда импортируют модели).
... которые всё равно обязаны импортировать этот fields. Поэтому от зависимостей так не избавиться. ИМХО, уносить поля в fields.py имеет смысл, если там какое-то нетривиальное количество кода накапливается. Если это какая-нибудь обёртка из трёх строк над стандартным полем, то можно и в models.py оставить.
-
Модели совершенно не обязательно импортировать fields.py.
Обычно идет разделение:
- models.py - модели
- admins.py - все, что касается админки
- forms.py - формы для админки и шаблонов
- fields.py - поля для форм
Если грамотно все писать, то models.py не будут импортировать ничего из вышеуказанного списка.
Что касается общих полей, то тоже самое, что для любой другой общей функциональности - выносится в common или другое приложение, которое у вас будет. Модули - это ведь просто обычные файлы, совершенно не важно где их хранить. Конечно, надо учитывать требования Django для расположения некоторых модулей, но в данном случае (для общих полей) таких требований нет. -
Мне показалось, что изначально речь шла о БД полях, а не о формовых, нет?
-
Да, именно о БД полях.
Но, в принципе, я получил ответ на свои сомнения :)
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.



