【问题标题】:How to use AUTH_USER_MODEL if I just want to use the standard user model如果我只想使用标准用户模型,如何使用 AUTH_USER_MODEL
【发布时间】:2021-06-20 19:51:38
【问题描述】:

我看过几篇帖子和read the documentation,关于如何在settings.py 中设置AUTH_USER_MODEL 是最佳实践,但没有看到任何关于如何做到这一点的实际示例。我尝试了几种配置,但一直收到此错误:

django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL 指的是尚未安装的模型'auth.User'

它甚至没有告诉我错误发生在哪里。以下是我尝试过的方法:

方法 1:

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

然后我会像这样引用我的用户:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

方法 2:

from django.contrib.auth.models import User

两者都不起作用,如果我只想使用标准用户模型,我不确定如何在 settings.py 中设置 AUTH_USER_MODEL。我根本没有自定义 User 对象。我假设类似AUTH_USER_MODEL = 'django.contrib.auth.models.User',但我不确定。

现在我得到了这个:

AttributeError: 'str' 对象没有属性 '_meta'

users/forms.py

from django import forms
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm
from .models import Profile


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = settings.AUTH_USER_MODEL
        fields = ['username', 'email', 'password1', 'password2']


class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = settings.AUTH_USER_MODEL
        fields = ['username', 'email']

【问题讨论】:

标签: python django django-settings django-auth-models


【解决方案1】:

我假设类似AUTH_USER_MODEL = 'django.contrib.auth.models.User',但我不确定。

您使用<i>app_name</i>.<i>ModelName</i> 引用模型,所以在这种情况下是:

# settings.py

AUTH_USER_MODEL = 'auth.User'

这也是默认值,所以如果你想使用Django的用户模型,你可以简单地省略settings.py中的AUTH_USER_MODEL设置。

此外,您需要将django.contrib.auth 添加到INSTALLED_APPS,所以:

# settings.py

INSTALLED_APPS = [
    # …,
    'django.contrib.auth',
    # …,
]

ModelFormModelSerializer 等中,您使用get_user_model() 来获取对用户模型类的引用:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
from .models import Profile

User = get_user_model()


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']


class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email']

【讨论】:

  • 我刚刚更新了我的问题。你帮我得到了答案,所以谢谢你!知道为什么现在说我的 SECRET_KEY 丢失了吗?
  • 我仍然有这个问题。我会付给你 50 美元/小时来帮助我解决这个问题,我觉得我们已经接近解决它了。有关更新的详细信息,我发布了这个 stackoverflow 帖子:stackoverflow.com/questions/66791148/…
【解决方案2】:

我同意威廉的观点。如果你要保留这个,我推荐以下。

在您的方法 1 中,

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

然后在views.py 中,使用get_user_model() 而不是User。 我希望它适用于您的情况。

【讨论】:

    【解决方案3】:

    你可以这样做。

    Models.py

    from django.contrib.auth.models import User
    
    class Profile(models.Model):
        user = models.OneToOneField(User , on_delete=models.DO_WhatEver_You_Want)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2023-03-13
    • 2021-01-25
    • 2014-02-06
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多