Ich möchte ein Projekt zur Suche nach einem Mentor erstellen. Bei der Planung dachte ich, dass es schön wäre, zwei Modelle für Registrierungsbenutzer zu trennen: für Studenten (diejenigen, die einen Mentor finden wollen) und Mentoren. Das eingebaute Django-Benutzermodell ist nicht so. Ich habe vor, weitere Felder hinzuzufügen, auch mehrere Felder können gleich sein: bei Studenten und bei Mentoren.

Können Sie mir ein Live-Beispiel für ein Customing-Modell geben? Wäre schön, wenn du etwas in Git oder anderem Code-Sharing hast. Soll ich das Mentor-Modell von Schülern erben, weil es dieselben Felder haben kann: E-Mail, Name, Nachname usw.?

Welchen zusätzlichen Code sollte ich für ein funktionierendes benutzerdefiniertes Modell schreiben? Ich las Dokumente und fand Unbekanntes für mich - Manager. Sollte ich auch Manager anpassen?

Wenn ich Erfolg mit einem benutzerdefinierten Modell habe, auf welche Probleme kann ich in Zukunft bei der Authentifizierung, Registrierung und Änderung von Kennwörtern für dieses benutzerdefinierte Modell stoßen?

2
Oleksiy 19 Aug. 2015 im 14:25

3 Antworten

Beste Antwort

Ihre Website hat zwei beabsichtigte Benutzer, sodass das Erstellen von zwei Benutzermodellen kein Problem darstellt. Stellen Sie einfach sicher, dass Sie sie vom Benutzermodell erben

from django.contrib.auth.models import User

class Student(User):

     ...

class Mentor(User):

     ...
2
hspandher 19 Aug. 2015 im 11:36

Sie sollten das Rad nicht neu erfinden, außer Sie möchten wirklich die Kernfunktionen von Django lernen und üben. Fügen Sie einfach eine Add-On-Bibliothek wie userena hinzu, die "Sie mit Anmeldung und Anmeldung versorgt" , Kontobearbeitung, Datenschutzeinstellungen und Private Messaging ". Im Allgemeinen gibt userena ein zusätzliches UserenaBaseProfile-Modell an, das mit dem integrierten Benutzermodell verbunden ist. Sie können dieses Modell also einfach für den Schüler und den Mentor erben:

from django.contrib.auth.models import User
from userena.models import UserenaBaseProfile

class CustomProfile(UserenaBaseProfile):
    user = models.OneToOneField(User, unique=True)
    common_field_for_all_children = models.IntegerField()
    class Meta:
        abstract = True

class Student(CustomProfile):
    something_student_related = models.IntegerField()

class Mentor(CustomProfile):
    something_mentor_related = models.CharField(max_length=255)
1
svfat 19 Aug. 2015 im 11:39

Das Erstellen von 2 separaten Modellen wird hier nicht empfohlen. Sie müssen einen separaten Anmeldevorgang haben und darauf achten, Probleme bei der Freigabe von pk zwischen Benutzern in separaten Tabellen zu vermeiden. Ich bin mir auch ziemlich sicher, dass Django das nicht zulässt.

Die bessere Wahl besteht darin, zwei Profilmodelle zu erstellen, wie in Erweitern des vorhandenen Benutzermodells. In einem der Profile speichern Sie bestimmte Daten für Schüler und in anderen spezifischen Daten für Mentoren.

4
GwynBleidD 19 Aug. 2015 im 11:31