Подтвердить что ты не робот

Где должен находиться код менеджера django?

Это довольно простой вопрос о шаблонах django. Мой менеджерский код обычно живет в models.py, но что происходит, когда models.py действительно огромна? Есть ли другой альтернативный шаблон, позволяющий вашему менеджерскому коду жить в models.py для удобства обслуживания и избежать циклического импорта?

Можно задать вопрос о том, почему models.py настолько велика, но просто предположим, что размер и ширина полезности оправданы.

4b9b3361

Ответ 1

Я предпочитаю сохранять свои модели в models.py и менеджерах в менеджерах .py(forms in forms.py) все в одном приложении. Для более общих менеджеров я предпочитаю хранить их в core.managers, если их можно повторно использовать для других приложений. В некоторых наших больших приложениях с моделями /modelname.py, которые будут содержать менеджер и код модели, который не выглядит плохим.

Ответ 2

Лучше всего использовать большой набор моделей - использовать модули django в ваших интересах и просто создать папку с именами моделей. Переместите ваши старые models.py в эту папку моделей и переименуйте ее __init__.py. Это позволит вам разделить каждую модель на более конкретные файлы внутри этой папки модели.

Затем вам нужно будет импортировать каждую модель в пространство имен __init__.py.

Так, например, вы можете разделить его на:

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

Тогда ваш __init__.py может просто быть:

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

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

Надеюсь, что это поможет.

Ответ 3

Я всегда занимаю место у менеджеров. Если у вас есть проблема с циклическим выпуском, помните, что a) вы можете ссылаться на класс модели для менеджера на self.model и b) вы можете импортировать внутри функций.

Ответ 4

То, что я делал при создании приложений Django, заключалось в создании файла [modelname].py только с конкретным кодом модели, кодом менеджера, а иногда и с кодом кода и использованием файла __init__.py для импорта, а затем всего в каталоге моделей. Это помогло мне по-прежнему поддерживать ее в управлении.