首页 > 解决方案 > 添加自定义用户时,Django 中的反向访问器冲突。在 settings.py 中添加 AUTH_USER_MODEL 也不起作用

问题描述

尝试使用自定义用户模型时出现反向访问器冲突错误。我在 settings.py 中添加了 AUTH_USER_MODEL 但仍然得到同样的错误。

当我想更改为使用自定义用户模型时,我正在编写一个 Django 项目(Django 版本 2.2.2)。已经有几个模型了,但是在这个阶段清除数据库重新开始就可以了,所以我删除了 sqlite3.db 和所有迁移。

因此,为了根据 django 文档拥有一个自定义用户模型,我添加了:

models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

... # other models

settings.py

AUTH_USER_MODEL = 'polls.User'

在那之后,

python .\manage.py makemigrations

应该可以工作。但事实并非如此。它显示的消息与我根本没有在 settings.py 中添加 AUTH_USER_MODEL 一样:

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'.
polls.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'.
polls.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'.

不知道会出什么问题。看起来大多数人都遇到同样的错误是他们错过了 AUTH_USER_MODEL。

PS:“民意调查”是我的应用名称。

尝试将自定义用户模型的类名更改为其他名称,例如“NovelUser”(替换 models.py 中的类名和 settings.py 中的 AUTH_USER_MODEL),仍然得到相同类型的错误:

auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'NovelUser.groups'.

等等

PS:不要以为我重新定义了任何组。在为此清除数据库之前,我在 admin 中创建了一个组,但是我已经删除了 splite3.db,所以我认为这无关紧要。

PS:定义 AUTH_USER_MODEL 似乎没有任何效果 - 如果我注释掉

class User(AbstractUser):
    pass

然后在使用默认用户模型时不会发现错误。

标签: pythondjango

解决方案


好的,我正在编辑错误的 settings.py(我在第一个“mysite”下有一个 settings.py 的副本,我不记得我是如何以及为什么首先添加它们的。我知道什么时候感谢 git,但是即使查看那个变更列表,我仍然完全不知道我是如何以及为什么这样做的)。

目录如下:

mysite
|- mysite
|  |- settings.py <- Should modify this one
|  |- ......
|  polls
|  |- (where most contents should be, including models.py etc)
|  |- ......
|- db.sqlite3
|- settings.py <- I had a copy of this file here and was modifying this file! Of course it won't work

好的,在第一名肯定是一个愚蠢的错误/问题。但是,根据我提供的信息,除了我以外的任何人都不可能找出问题所在,而且对我来说也很难......


推荐阅读