Maison >développement back-end >Tutoriel Python >Comment étendre au mieux le modèle utilisateur Django avec des champs personnalisés ?

Comment étendre au mieux le modèle utilisateur Django avec des champs personnalisés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 13:29:14263parcourir

How to Best Extend the Django User Model with Custom Fields?

Extension du modèle utilisateur Django : approches optimales

Lors de l'extension du modèle utilisateur Django intégré avec des champs personnalisés, deux approches principales se démarquent :

1. Utilisation d'une propriété OneToOneField(User)

Il s'agit de l'approche Django recommandée et implique la création d'un nouveau modèle avec une relation un-à-un avec le modèle User. Ce modèle de « profil » peut stocker des informations supplémentaires sur l'utilisateur.

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # Custom fields here, e.g.:
    address = models.CharField(max_length=255)
    phone_number = models.CharField(max_length=15)
    # ...

2. Remplacement par un modèle utilisateur personnalisé

Cette approche consiste à remplacer entièrement le modèle utilisateur Django par un modèle personnalisé qui inclut les modifications souhaitées. Cependant, cela est considéré comme drastique et est accompagné d'avertissements :

  • Cela peut casser d'autres fonctionnalités de Django qui reposent sur le modèle utilisateur.
  • Cela implique de copier et de modifier le module d'authentification de Django.
  • Cela implique de copier et de modifier le module d'authentification de Django.
Cela peut nécessiter la réimplémentation de mécanismes d'authentification.

Utilisation du courrier électronique comme nom d'utilisateur

    Pour utiliser l'e-mail comme nom d'utilisateur, vous pouvez soit :
  • Remplacer la méthode get_username() dans votre modèle d'utilisateur personnalisé.
Utiliser la méthode set_username() pour mettre à jour le nom d'utilisateur d'un utilisateur existant utilisateur.

Exemple :
class CustomUser(AbstractUser):

    def get_username(self):
        return self.email

# ...
user = CustomUser.objects.get(username='john@example.com')
user.set_username('jack@example.com')
user.save()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn