Должен ли я создавать модель только в приложении в 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:

Вернуться на верх