Erreur lors de l'utilisateur de l'email comme nom d'utilisateur
Bonjour,
Lorsque j'utilise l'adresse email comme nom d'utilisateur et que je fais les migrations j'ai une erreur.
**accounts/models.py**
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
if not email:
raise ValueError("L'adresse mail est obligatoire")
email = self.normalize_email(email)
user = self.model(email=email) # model de la classe Shopper
user.set_password(password) #encrypter le mot de passe
user.save()
return user
def create_superuser(self, email, password, **kwargs):
kwargs["is_staff"] = True
kwargs["is_superuser"] = True
kwargs["is_active"] = True
return self.create_user(email=email, password=password, **kwargs)
class Shopper(AbstractUser):
username = None
email = models.EmailField(max_length=255, unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = CustomUserManager()
**shop/models.py**
class Order(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE)
shop = models.ForeignKey(Shop, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
ordered_date = models.DateTimeField(blank=True, null=True)
Message d'erreur:
django.db.utils.IntegrityError: The row in table 'shop_order' with primary key '3' has an invalid foreign key: shop_order.user_id contains a value '8' t
hat does not have a corresponding value in accounts_shopper.id.
Si j'ai bien compris, la classe "user" hérite de la classe Shopper, donc je n'arrive pas à comprendre pourquoi le user_id ne correspond pas au shopper_id.
Merci par avance pour votre aide.
Maryline
Salut Maryline,
De ce que je vois de ton message d'erreur, le problème n'est pas directement lié à ton modèle d'utilisateur personnalisé (Shopper) ou à l'utilisation d'email comme nom d'utilisateur. Il semble plutôt que tu as un problème de clé étrangère dans ta table de commandes (Order).
L'erreur indique que dans ta table shop_order, la ligne avec la clé primaire '3' a un user_id qui est '8' et ce user_id n'a pas de correspondance dans la table accounts_shopper.id. Autrement dit, tu essaies d'associer une commande à un utilisateur qui n'existe pas.
Pour résoudre ce problème, il y a quelques choses que tu pourrais vérifier :
-
Est-ce que l'entrée
Shopperavec l'ID de '8' existe vraiment dans la tableaccounts_shopper? Si non, d'où vient ce chiffre '8'? Tu peux vérifier cela en regardant directement dans ta base de données ou via l'interface d'administration Django si tu l'as configurée. -
Est-ce que tu as eu des changements majeurs dans tes modèles et ensuite tu as essayé de faire une migration sans corriger les données ? Cela pourrait entraîner des incohérences de données. Dans ce cas, tu pourrais avoir à nettoyer ta base de données et à recréer les données en fonction de tes nouveaux modèles.
-
Enfin, assure-toi d'avoir bien défini
AUTH_USER_MODELdans tes settings. Comme tu utilises un modèle personnalisé d'utilisateur, tu dois ajouterAUTH_USER_MODEL = 'accounts.Shopper'dans tes settings pour que Django sache quel modèle utiliser.
Voilà pour les pistes à explorer :)
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte