3

我已经看过几篇文章并阅读了有关如何AUTH_USER_MODEL在 settings.py 中进行设置的最佳实践的文档,但没有看到任何有关如何执行此操作的实际示例。我尝试了几种配置,但不断收到此错误:

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

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

方法一:

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

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

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

方法二:

from django.contrib.auth.models import User

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

现在我得到了这个:

AttributeError:“str”对象没有属性“_meta”

用户/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']
4

3 回答 3

2

我同意威廉的观点。如果您要保留此内容,我建议以下内容。

在您的方法 1 中,

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

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

于 2021-03-24T07:32:42.053 回答
1

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

你指的是一个模型,所以在这种情况下是:app_name.ModelName

# settings.py

AUTH_USER_MODEL = 'auth.User'

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

此外,您需要添加django.contrib.authINSTALLED_APPS,所以:

# settings.py

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

在 a ModelForm,ModelSerializer等中,您可以使用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']
于 2021-03-24T06:46:55.190 回答
0

你可以简单地做到这一点。

模型.py

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User , on_delete=models.DO_WhatEver_You_Want)
于 2021-03-24T06:52:26.687 回答