Tom*_*Tom 5 python django django-settings django-auth-models
我看过几篇文章并阅读了有关如何在 settings.py 中进行设置的最佳实践的文档AUTH_USER_MODEL,但没有看到任何有关如何执行此操作的实际示例。我尝试了几种配置,但不断收到此错误:
django.core.exceptions.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型“auth.User”
它甚至没有告诉我错误发生在哪里。以下是我尝试过的方法:
方法一:
from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)
然后我会像这样引用我的用户:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
方法二:
from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
两者都不起作用,而且我不确定如果我只想使用标准用户模型,AUTH_USER_MODEL我将如何在 settings.py 中设置。我根本没有自定义 User 对象。我假设类似,但我不确定。AUTH_USER_MODEL = 'django.contrib.auth.models.User'
现在我得到了这个:
AttributeError:“str”对象没有属性“_meta”
用户/表单.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']
Run Code Online (Sandbox Code Playgroud)
我假设类似
AUTH_USER_MODEL = 'django.contrib.auth.models.User'但我不确定。
您使用 引用模型,因此在本例中为:app_name.ModelName
# settings.py
AUTH_USER_MODEL = 'auth.User'Run Code Online (Sandbox Code Playgroud)
这也是默认值,因此如果您想使用 Django 的用户模型,您可以简单地AUTH_USER_MODEL省略settings.py.
此外,您需要添加django.contrib.auth到INSTALLED_APPS,因此:
# settings.py
INSTALLED_APPS = [
# …,
'django.contrib.auth',
# …,
]Run Code Online (Sandbox Code Playgroud)
在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']Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8577 次 |
| 最近记录: |