【问题标题】:Django Rest Framework, user models getting errorDjango Rest Framework,用户模型出错
【发布时间】:2020-05-07 08:44:10
【问题描述】:

我的项目是一个简单的博客应用程序,用户可以在其中发布、评论和喜欢帖子。 我使用了 Django 默认用户注册页面,后来我添加了带有自定义用户模型的 Djoser(Django REST 框架的第三方令牌认证),导致崩溃,请查看此

请注意,如果我避免使用 Djoser 的自定义用户,我的项目可以正常工作,即我可以使用令牌和会话身份验证进行注册

FORMS.PY #for Django 的默认注册视图

from django import forms
#from django.contrib.auth.models import User
from .models import User
from django.contrib.auth.forms import UserCreationForm

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    class Meta:
        model = User
        fields=['username','email','phone','first_name','last_name','password1','password2']

MODELS.PY # Djoser 自定义用户模型

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings

class User(AbstractUser):
    email = models.EmailField(verbose_name='email' ,max_length=223,unique=True)
    phone=models.CharField(null=True,max_length=11)
    REQUIRED_FIELDS = ['username','phone','first_name','last_name']
    #USERNAME_FIELD = 'email'

    def get_username(self):
        return self.email

错误回溯

ERRORS:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.
        HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.
        HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.
userapp.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.
        HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.
userapp.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.
        HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.

【问题讨论】:

  • 能否提供错误回溯?
  • 当然,我更新了错误的问题

标签: python django django-rest-framework


【解决方案1】:

您必须在 settings.py 中添加 AUTH_USER_MODEL。这样做将允许您的User 模型默认更改为新模型。因此,可以正常工作:

AUTH_USER_MODEL = 'APPNAME.MODELCLASSNAME'

在您的情况下,AppName 是您的 models.py 所在的应用程序。可能是accounts 或类似的东西:

AUTH_USER_MODEL = 'accounts.User'

看看这个关于自定义身份验证用户的精美文档。 customize_user_django

*注意:accounts 是我对您未指定的应用名称的猜测,User 确定您在 models.py 中指定的名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多