Django 自定义用户模型最佳实践:用户 = get_user_model()?



>我正在尝试创建自定义用户类,我想知道实现引用新用户的最佳实践。按照 Django docs 方法实现自定义用户后,models.py:

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass

和 settings.py

AUTH_USER_MODEL = 'myapp.MyUser'

和 admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)

Django 文档说要使用设置。AUTH_USER_MODEL专门用于外键和一对一字段的用户,但不清楚其他实例。

我的问题特定于如何在 views.py 中引用自定义用户类。在定义我使用的用户类之前

from django.contrib.auth.models import User

但是在定义自定义类后,这不再正确。我已经看到样板代码在 views.py 开头使用此方法:

from django.contrib.auth import get_user_model
User = get_user_model()

这是引用自定义用户的最佳做法吗?或者我应该只使用设置。AUTH_USER_MODEL代替我以前拥有用户的位置?

使用设置。AUTH_USER_MODEL将在加载所有 Django 应用程序后延迟加载用户类。最初加载应用时,在模块级别调用 get_user_model(( 可能会导致用户模型应用未加载,并且还会导致循环导入。

更新:我读了两个具体问题:

如何正确访问用户模型、贡献或自定义。

Djangos get_user_model(( 很简单地使用settings.AUTH_USER_MODEL调用 django.apps get_model((。如果要编写的应用可能会在其他用户模型的其他项目中重复使用,请使用get_user_model调用。总是。那么用户模型是什么就无关紧要了。

如果您已经创建了自己的core.User模型,并且非常确信您的代码将仅用于此项目,那么from core.models import User也可以工作。

何时使用设置中的字符串表示形式,而不是获取模型。

字符串表示最终通常会调用相同的 django.apps get_model((。通过在外键、OneToOneFields 等中给出一个字符串而不是类本身,你根本不需要在 django 应用程序导入期间查找模型,因为用户模型可能尚不可用。因此,使用字符串表示只是延迟加载模型。所有型号也是如此。

在 django 不同的主要版本中,这种行为也发生了变化,这是另一个话题。请注意,get_user_model(( 已在 Django 1.11 中更新用于导入。

https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#referencing-the-user-model

你可以选择get_user_model而不是User

from django.contrib.auth import get_user_model
User = get_user_model()

get_user_model返回此项目中处于活动状态的用户模型。

如果您修改(将新字段添加到其中(默认User您需要使用的表get_user_model它将返回活动的用户表。

顺便说一句,User将从django.contrib.auth.models返回本地人

相关内容

  • 没有找到相关文章

最新更新