Surcharge de l'utilisateur de base de Django

De ce que j'ai pu apprendre, il y a trois façon de modifier l'utilisateur de base de Django:


  1. Créer un second modèle

    Créer un second modèle, puis l'attacher à l'utilisateur avec un OneToOneField. Vous ne devriez problement pas utiliser cette solution. Même si elle est probablement la solution la plus simple, elle génère des requêtes supplémentaires et vous oblige à nommer la seconde classe. Dans mon sens ce n'est pas une bonne chose car, comme dans mon exemple, dans quelle classe métriez vous un numéro de téléphone ? Dans une classe profile ? Alors pourquoi l'email n'en fais pas partie ? Dans mon sens ces questions ne devraient jamais avoir à être posées. from django.db import models from django.contrib.auth.models import User # Create your models here. class More(models.Model): """ """ user = models.OneToOneField('User', on_delete=models.CASCADE) phone = models.CharField(max_length=20)
  2. Utiliser un modèle proxy

    Cette méthode n'est à utiliser que si vous souhaitez ne changer que le manager et / ou rajouter des méthodes à la classe User. from django.contrib.auth.models import User from .managers import MyUserManager # Create your models here. class MyUser(User): """ """ objects = MyUserManager class Meta: proxy = True def my_method(self, *args, **kwargs): ...
  3. Hériter d'une classe abstraite

    Héritez de la classe abstraite AbstractUser (ou AbstractBaseUser si vous ne voulez que les fonctionnalités d'authentification). C'est celle si que je préfère de loin est la troisième. Elle a l'avantage d'utiliser une classe abstraite et de ne pas avoir un utilisateur séparé en 2 classes jointes, donc sans requêtes supplémentaires. Son application est très explicite et je pense qu'un exemple suffit à la comprendre : from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class MyUser(AbstractUser): """ """ phone = models.CharField(max_length=20)

Vous devrez ensuite référencer votre modèle dans le fichier settings.py: AUTH_USER_MODEL = 'myapp.MyUser'