Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Django - Surcharger le modèle User de Django

Date de publication 26 nov. 2020
Lorsque vous avez une gestion des utilisateurs qui est proche de celle de Django, il est possible d'étendre cette dernière en lui ajoutant des propriétés personnalisées.

Ce tutoriel considère que vous démarrez une nouvelle application.

Nouvelle application


Dans un 1er temps il faut installer l'application et lancez
python manage.py migrate

ATTENTION : ne pas lancer un
python manage.py makemigration
car on veut modifier le modèle User avant

Mise à jour du profil


Maintenant il faut créer le nouveau profil qui héritera du modèle User de django au travers AbstractUser
Ensuite il faut ajouter dans le settings.py, la valeur correspondante au nom de votre application et le nom du modèle
AUTH_USER_MODEL = 'myApp.UserProfil'


Migration


Il est temps maintenant de préparer les changements à appliquer
python manage.py makemigrations

et de faire la migration
python manage.py migrate

IMPORTANT : Si le migrate ne fonctionne pas il faut supprimer toutes les tables sauf django_migrations et vider le contenu de cette table. Puis refaire un migrate.

Configuration de l'administration de django


Maintenant que le modèle est appliqué en base de données nous allons l'utiliser dans la partie admin

Il est IMPORTANT de mettre from myApp.models.user_profil import UserProfil avant les imports django.contrib.auth sinon vous aurez une erreur de ce type

django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'myApp.UserProfil' that has not been installed


Résultat affiché dans la page d'administration


UserProfilForm est la page à afficher pour la création d'un utilisateur

Création d'un utilisateur avec le modèle surchargé de Django

Tandis que UserProfilChangeForm sera utilisé pour la mise à jour d'un utilisateur.

Création d'un utilisateur avec le modèle surchargé de Django

Retrouvez cet exemple sur lequel je me suis appuyé dans la documentation de Django
blog comments powered by Disqus