J'essaie de changer mon modèle d'utilisateur en un modèle personnalisé. Cela ne me dérange pas de laisser tomber ma base de données et d'en utiliser une nouvelle, mais lorsque j'essaye d'exécuter makemigrations, j'obtiens cette erreur
from django.db import models from django.contrib.auth.models import User # Create your models here. class Session(models.Model): session_title = models.CharField(max_length=300) session_time = models.DateTimeField("Time of session") session_difficulty = models.CharField(max_length=200) session_duration = models.IntegerField() session_description = models.TextField() session_client = models.ManyToManyField(User, blank=True) def __str__(self): return self.session_title
booking / views.py
INSTALLED_APPS = [ #Custom apps 'mainapp.apps.MainappConfig', 'bookings.apps.BookingsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] AUTH_USER_MODEL = 'mainapp.CustomUser'
settings.py
from django.shortcuts import render, get_object_or_404 from django.http import HttpResponse, HttpResponseRedirect from bookings.models import Session from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User # Create your views here. def book(request, Session_id): lesson = get_object_or_404(Session, pk=Session_id) try: client = request.user.id except (KeyError, Choice.DoesNotExist): return render(request, 'booking/details.html', { 'lesson': lesson, 'error_message': "You need to login first", }) else: lesson.session_client.add(client) lesson.save() return HttpResponseRedirect("")
réservations / modèles.py
bookings.Session.session_client: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out. HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'.
J'essaye de changer le modèle d'utilisateur en abstractuser.
3 Réponses :
inclure les éléments suivants à dans views.py
from django.conf import settings User = settings.AUTH_USER_MODEL
et supprimer from django.contrib.auth.models import User
Le problème est cette ligne dans booking / models.py:
session_client = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
Vous avez un ManyToManyField à User, mais vous avez défini un modèle User différent.
Donc, dans ce champ, supprimez l'importation de l'utilisateur, ajoutez
from django.conf import settings
et changez la ligne de modèle en
session_client = models.ManyToManyField(User, blank=True)
Edit: il y a un autre problème similaire dans views.py, comme le note HenryM.
car dans settings.py est défini
user = models.ForeignKey('user.User', on_delete=models.CASCADE)
au lieu de auth.User j'ai ajouté user.User
AUTH_USER_MODEL = 'user.User'