Здесь происходит много вещей.Как вы знаете, Django поставляется с рядом пакетов "contrib", которые можно использовать в вашем приложении.Вы «активируете» их, поместив их в INSTALLED_APPS
.
. При запуске python manage.py syncdb
Django анализирует файлы models.py каждого приложения в INSTALLED_APPS
и создает связанные таблицы в вашей базе данных.Итак, как только вы добавили django.contrib.auth
к вашему INSTALLED_APPS
и запустили syncdb
, таблицы для User
и Group
готовы и готовы к использованию.
Теперь, если вы хотитеиспользуйте эти модели в других своих приложениях, вы можете импортировать их, как вы упомянули, что-то вроде from django.contrib.auth.models import User
.Затем вы можете сделать что-то вроде создания ForeignKey
, OneToOneField
или ManyToManyField
на одной из ваших моделей для модели User
.Когда вы делаете это, таблицы не создаются (за исключением ManyToManyField
; подробнее об этом чуть позже).Одна и та же таблица всегда используется для User
, так же как и для любой из ваших собственных моделей, между которыми вы можете создавать отношения.
ManyToManyField
s немного отличаются тем, что создается промежуточная таблица (часто называемая«таблица соединения»), которая связывает обе стороны отношений вместе.Тем не менее, это чисто для целей этой конкретной взаимосвязи - ничто в реальной таблице User
не отличается и не изменяется каким-либо образом.
Дело в том, что одна таблица создана для User
иэта же таблица используется для хранения всех User
независимо от того, в каком контексте они были созданы. Вы можете импортировать User
во все ваши приложения, создавать столько разноплановых отношений, сколько захотите, и на самом деле ничего не изменится.Что касается User
.