aircraft
aircraft

Reputation: 26896

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

In my Django project I have a user_manage app.

I create a model named UserManage in my user_manage app's model.py:

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

class UserManage(AbstractUser):
    username = models.CharField(max_length=12)

Then I run:

$ python3 manage.py makemigrations

There comes the error:

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

Upvotes: 169

Views: 149090

Answers (7)

Leo Geo
Leo Geo

Reputation: 9

If above steps don´t work, delete all migrations history and your database.

Then "makemigrations" and "migrate" like it was for the first time.

The User model must be created at beginning of the project, before firts migration.

Upvotes: 0

Harshit Sahu
Harshit Sahu

Reputation: 131

The solution is to first add the following line into your settings.py-

AUTH_USER_MODEL="myproject.User"

Where myproject is your project name. If you again get error then run following commands in your main directory-

python manage.py makemigrations
python manage.py migrate

This worked for me

Upvotes: 13

Ravindrakumara
Ravindrakumara

Reputation: 141

Add this setting.py AUTH_USER_MODEL = "myapp.User"

Upvotes: 10

Arnab Das
Arnab Das

Reputation: 157

Add this in the settings at the end of the code :

AUTH_USER_MODEL="users.CustomUser"

Upvotes: 8

Tanuja Joshi
Tanuja Joshi

Reputation: 47

Just add AUTH_USER_MODEL="your app name.User" in settings.py as shown in the code below

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
AUTH_USER_MODEL="myproject.User"
    
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
    
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

Upvotes: 2

aircraft
aircraft

Reputation: 26896

Add the following to settings.py:

AUTH_USER_MODEL = "users_management.UserManage" 

More generally,

AUTH_USER_MODEL = 'YourAppName.YourClassName'
  • YourAppName: This is the name of the app that will have the User Model
  • YourClassName: This is the name of the class used inside the models.py file

Upvotes: 329

AjayShelar
AjayShelar

Reputation: 462

Add this in the settings :

AUTH_USER_MODEL = 'APPNAME.User'

This way we are telling Django to use our custom model instead the default one. https://docs.djangoproject.com/en/2.2/topics/auth/customizing/#substituting-a-custom-user-model

Upvotes: 31

Related Questions