3
votes

Comment réparer Field définit une relation avec le modèle 'auth.User', qui a été remplacé

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.


0 commentaires

3 Réponses :


3
votes

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


0 commentaires

5
votes

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.


0 commentaires

0
votes

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'


0 commentaires