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
Libérer: 2024-12-16 13:29:14
original
331 Les gens l'ont consulté

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)
    # ...
Copier après la connexion

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()
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal