Heim >Backend-Entwicklung >Python-Tutorial >Wie erweitert man das Django-Benutzermodell am besten mit benutzerdefinierten Feldern?

Wie erweitert man das Django-Benutzermodell am besten mit benutzerdefinierten Feldern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 13:29:14266Durchsuche

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

Erweitern des Django-Benutzermodells: Optimale Ansätze

Bei der Erweiterung des integrierten Django-Benutzermodells mit benutzerdefinierten Feldern stechen zwei Hauptansätze hervor :

1. Verwendung einer OneToOneField(User)-Eigenschaft

Dies ist der empfohlene Django-Ansatz und beinhaltet die Erstellung eines neuen Modells mit einer Eins-zu-Eins-Beziehung zum Benutzermodell. Dieses „Profil“-Modell kann zusätzliche Informationen über den Benutzer speichern.

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. Ersetzen durch ein benutzerdefiniertes Benutzermodell

Bei diesem Ansatz wird das Django-Benutzermodell vollständig durch ein benutzerdefiniertes Modell ersetzt, das die gewünschten Änderungen enthält. Es gilt jedoch als drastisch und bringt Warnungen mit sich:

  • Es kann andere Django-Funktionen zerstören, die auf dem Benutzermodell basieren.
  • Es beinhaltet das Kopieren und Ändern des Django-Authentifizierungsmoduls.
  • Möglicherweise muss die Authentifizierung erneut implementiert werden Mechanismen.

E-Mail als Benutzernamen verwenden

Um E-Mail als Benutzernamen zu verwenden, können Sie entweder:

  • get_username überschreiben ()-Methode in Ihrem benutzerdefinierten Benutzermodell.
  • Verwenden Sie die set_username()-Methode, um den Benutzernamen eines zu aktualisieren vorhandener Benutzer.

Beispiel:

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()

Das obige ist der detaillierte Inhalt vonWie erweitert man das Django-Benutzermodell am besten mit benutzerdefinierten Feldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn