Django 2.1 Импорт моделей пользовательских моделей - PullRequest
0 голосов
/ 18 ноября 2018

Я работал над моделью расширенного пользователя в моем проекте Django 2.1.Мне любопытно узнать, является ли способ, которым я импортирую свою модель CustomUser в другую модель (для использования в качестве ForeinKey), является правильным способом сделать это.

В прошлом я встречал словоблудие, указывающее на то, что неправильно импортировать модель User из приложения администратора, а импортировать ее из django.conf.

пример импорта из базыМодель пользователя:

from django.conf import settings

User = settings.AUTH_USER_MODEL
...
class <ModelName>(models.mode):
    user = ForeignKey(User, on_delete=models.CASCADE, default=1)

Теперь, когда я использую модель CustomUser (расширяя AbstractUser),

users / models.py:

class CustomUser(AbstractUser):

    objects = CustomUserManager()

    def __str__(self):
        return self.username

Лучше ли это практиковатьчтобы импортировать эту модель через настройки (как показано выше) или как я делаю это ниже (в моем приложении Post) правильный путь к ней:

posts / models.py:

from users.models import CustomUser

class Post(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=1)

Я предполагаю, что это неправильный путь, но я не уверен, почему, может кто-то дать мне знать, почему вышеизложенное не является наилучшей практикой?Примечание: это делает работу, хотя.

Спасибо!

1 Ответ

0 голосов
/ 18 ноября 2018

Нет ничего плохого в том, как вы импортируете. Способ импорта «настроек» - это просто обходной путь к базовой модели, поскольку Django позволяет использовать пользовательскую модель для обработки аутентификации пользователей.

Еще лучше, однако, использовать «ленивый» подход к загрузке, который вообще не требует операторов импорта:

user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, default=1)

Будьте осторожны, используя default на ForeignKeyField, кстати. Вы должны быть абсолютно уверены, что предоставленное вами значение по умолчанию уже будет присутствовать и никогда не исчезнет из базы данных.

...