J'ai commencé un projet django avec l'extension du modèle User de AbstractUser à mon modèle personnalisé qui a une relation de clé étrangère avec un autre modèle. Lorsque j'essaie de créer un super-utilisateur avec manage.py, cela ne crée pas de super-utilisateur pour les tests, ce qui me donne IntegrityError. Je sais qu'il n'y a aucun enregistrement dans RoleModel alors comment puis-je gérer cette situation. Je jouerai le rôle pendant que l'enseignant s'inscrira sur le site. Toute aide sera appréciée
class TeacherModel(AbstractUser):
middle_name = models.CharField(max_length=256)
role = models.ForeignKey(RoleModel, on_delete=models.DO_NOTHING, null=True)
3 Réponses :
Exception levée lorsque l'intégrité relationnelle de la base de données est affectée, par exemple une vérification de clé étrangère échoue, une clé en double, etc.
Voici la réponse: IntegrityError dans Django
Tout d'abord, que voulez-vous faire, étendre ou personnaliser le modèle utilisateur?
Si vous voulez étendre ... c'est assez avec une clé étrangère. Pour cela, le projet Django recommande d'utiliser OneToOneField (User) .
Vous pouvez utiliser OneToOneField (TeacherModel) dans votre RoleModel
Dans ce cas, consultez le lien ci-dessous.
https: // docs.djangoproject.com/en/2.1/topics/auth/customizing/#extending-the-existing-user-model
En revanche, si vous souhaitez personnaliser le modèle User, vous devez le faire avant d'effectuer les migrations. La configuration initiale doit avoir votre personnalisation. Vous ne pouvez créer une application que pour la personnalisation du modèle utilisateur.
Dans ce cas, consultez les liens ci-dessous.
https: // docs.djangoproject.com/en/2.1/topics/auth/customizing/#substituting-a-custom-user-model
https://wsvincent.com/django-tips-custom-user- modèle /
J'espère que cela vous a aidé
Tout d'abord, vous devrez ajouter la liste REQUIRED_FIELDS à la classe AbstractUser avec les champs supplémentaires que vous souhaitez que l'utilisateur soit invité lors de la création d'un superutilisateur avec le Commande de gestion createuperuser . Consultez la documentation ici < / a>
Deuxièmement, vous devrez créer et utiliser un UserManager personnalisé sur votre modèle d'utilisateur personnalisé qui gère les champs supplémentaires que vous avez ajoutés au modèle d'utilisateur lors de la création d'un nouvel utilisateur.
Vous pouvez vous référer à ce commit Django GitHub qui a introduit ce support sur la façon de mettre en œuvre la fonctionnalité. Le code est simple et facile à comprendre.
Vous aurez peut-être également besoin de quelques autres personnalisations pour que tout fonctionne correctement. Voir cet exemple complet donné dans le Documents Django.