113 votes

auth.User.groups : (fields.E304) L'accesseur inverse pour 'User.groups' entre en conflit avec l'accesseur inverse pour 'UserManage.groups'.

Dans mon projet Django, j'ai un user_manage app.

Je crée un modèle nommé UserManage dans mon user_manage model.py de l'application :

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

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

Alors je cours :

$ python3 manage.py makemigrations

C'est là qu'intervient l'erreur :

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

33 votes

Avez-vous mentionné AUTH_USER_MODEL sur settings.py ?

230voto

aircraft Points 5111

Ajoutez ce qui suit à settings.py :

AUTH_USER_MODEL = "users_management.UserManage" 

Plus généralement,

AUTH_USER_MODEL = 'YourAppName.YourClassName'
  • Votre nom d'application : C'est le nom de l'application qui aura le modèle d'utilisateur.
  • VotreNomDeClasse : C'est le nom de la classe utilisée à l'intérieur de l'application models.py fichier

0 votes

Comment puis-je ajouter un utilisateur à partir d'un chemin comme UsersManager.models.custom_user.User ?

1 votes

Et si j'ai besoin de migrer d'abord ? c'est-à-dire : ... makemigrations users ? Sans AUTH_USER_MODEL, je recevrai l'erreur "clash". Avec AUTH_USER_MODEL : "AUTH_USER_MODEL fait référence au modèle '%s' qui n'a pas été installé" % settings.AUTH_USER_MODEL

0 votes

A mon commentaire précédent : La raison était que dans la même application avec AUTH_USER_MODEL il y avait un deuxième modèle avec l'utilisation de get_user_model(). Il était nécessaire de commenter le second modèle et de faire les "makemigrations" en deux étapes.

28voto

AjayShelar Points 306

Ajoutez ceci dans les paramètres :

AUTH_USER_MODEL = 'APPNAME.User'

De cette façon, nous indiquons à Django d'utiliser notre modèle personnalisé au lieu du modèle par défaut. https://docs.djangoproject.com/en/2.2/topics/auth/customizing/#substituting-a-custom-user-model

2 votes

Veuillez modifier votre réponse afin d'ajouter une explication du fonctionnement de votre code et de la manière dont il résout le problème du PO. De nombreux utilisateurs de StackOverflow sont des débutants et ne comprendront pas le code que vous avez posté. Ils ne tireront donc aucun enseignement de votre réponse.

4voto

Arnab Das Points 49

Ajoutez ceci dans les paramètres à la fin du code :

AUTH_USER_MODEL="users.CustomUser"

3voto

Ravindrakumara Points 25

Ajoutez ce paramètre.py AUTH_USER_MODEL = "myapp.User"

2voto

Tanuja Joshi Points 27

Il suffit d'ajouter AUTH_USER_MODEL="your app name.User" sur settings.py comme indiqué dans le code ci-dessous

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',
    },
]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X