【问题标题】:Django 2.1 Models Importing Custom User ModelDjango 2.1 模型导入自定义用户模型
【发布时间】:2018-11-17 23:19:14
【问题描述】:

我一直在我的 Django 2.1 项目中处理扩展用户模型。我很想知道将我的 CustomUser 模型导入另一个模型(用作 ForeinKey)的方式是否正确。

我过去曾遇到过这样的说法,即从管理应用程序中简单地导入用户模型是不正确的,而是从 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),

用户/模型.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)

我假设这是错误的方法,但我不知道为什么,有人可以告诉我为什么上述不是最佳实践吗?注意:它确实完成了工作。

谢谢!

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    您的导入方式没有问题。导入的“设置”方式只是获取底层模型的一种迂回方式,因为 Django 允许您使用自定义模型进行用户身份验证处理。

    然而,更好的是使用“惰性”加载方法,它根本不需要任何导入语句:

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

    顺便说一句,在ForeignKeyField 上使用default 时要小心。您需要绝对确定您提供的默认值已经存在,并且永远不会从数据库中消失。

    【讨论】:

    • 谢谢 Jonah - 在这种情况下,我真的不需要默认用户。我将删除它并设置 blank=True 以避免任何潜在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2012-06-28
    • 2012-05-05
    • 2014-02-07
    • 2015-03-08
    相关资源
    最近更新 更多