Должен ли я создавать модель только в приложении в Django, а не в проекте напрямую?
Я создал проект следующим образом:
$ cd dj-container
$ django-admin startproject core .
$ django-admin startapp app1
Это означает, что core.apps не существует, но существует app1.apps.
Я хочу создавать модели под ядром, а не под app1 (некоторые модели, которые не являются специфическими для приложения, но являются специфическими для проекта). Я создал модель Country
под ядром, и при запуске makemigrations
я получаю эту ошибку: RuntimeError: Model class core.models.Country doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Нужно ли мне добавить core
в INSTALLED_APPS? А затем, возможно, создать core.apps и создать ярлык приложения. По сути, я превращаю core
в app
, и мне смутно кажется, что это неправильный подход. Или мне просто добавить явную метку app_label в Model? Или мне следует создать отдельное приложение только для общих таблиц?
Чтобы создать предпосылку, скажу следующее: исходя из того, как построен фреймворк миграций Django, когда вы определяете расположение ваших данных, то есть models
, вам нужно сказать Django, где эти models
находятся, так что да, вы должны создать пакет и добавить в него модуль models
, в котором будут находиться ваши models
. Этот пакет должен быть добавлен в settings.INSTALLED_APPS
. Это позволит Django найти эти модели.
Помните, что когда вы запускаете:
django-admin startproject project
Вы получите каталог project
, содержащий внутренний каталог project
, который представляет собой пакет Python с модулями: settings
, urls
, asgi
и wsgi
. Нет никаких ограничений на то, что этот внутренний каталог project
не может также считаться приложением и иметь модели и т. д. Для этого необходимо добавить его в settings.INSTALLED_APPS
.
References: