2011-01-10 7 views
0

Ich sah eine Reihe von Möglichkeiten zur Erweiterung der Benutzerinformationen von Benutzern und entschied, die Modellvererbungsmethode zu übernehmen.Benutzervererbung in Django

zum Beispiel, ich habe:

class Parent(User): 
    contact_means = models.IntegerField() 
    is_staff = False 
    objects = userManager() 

Jetzt ist es fertig ist, habe ich heruntergeladen django_registration mich mit helfen, E-Mails, um neue Benutzer zu senden. Die Sache ist, anstatt Anmeldeformulare zu verwenden, um neue Benutzer zu registrieren, möchte ich die E-Mail senden/Aktivierung Fähigkeit von django_registration aufrufen. Also mein Workflow ist:

1. add new Parent object in admin page. 
2. send email 

Mein Problem ist, die django-Registrierung erstellt ein neues Registrierungsprofil zusammen mit einem neuen Benutzer in der Benutzertabelle. Wie optimiere ich das, so dass ich den Benutzereintrag in die benutzerdefinierte Benutzertabelle hinzufügen kann.

Ich habe versucht, eine

modelAdmin

und verändern die save_model Methode zu erstellen, um die create_inactive_user von django_registration zu starten, kann ich jedoch nicht, wie das Benutzerobjekt aus django_registration erzeugt speichern in meinem Parent-Tabelle, wenn ich Modellvererbung verwende und ich kein Fremdschlüsselattribut in meinem Elternmodell habe.

+0

Ja Sie einen impliziten Fremdschlüssel für Benutzer müssen in Parent, das von der Modellvererbung erstellt wird, heißt user_ptr –

Antwort

2

Es ist wohl so etwas wie:

p = Parent() 
p.user_ptr = user 
p.contact_means = ... 
p.save() 

(Django den Fremdschlüssel für Sie erstellt, wenn Modell Vererbung zu tun, und das Attribut in _ptr Endung)

+0

ist _ptr ein eingebautes Schlüsselwort? – goh

+2

Nein. Djangos ORM verwendet Metaprogrammierung, um Attribute in Ihren Python-Klassen basierend auf den Feldern und Beziehungen Ihres Modells zu erstellen. Es verwendet bestimmte Konventionen (indem beispielsweise _set, _ptr an den Feldnamen angehängt wird) für diese zusätzlichen Attribute. –

+0

Nicht funktioniert für mich, dies würde alle Daten von 'Benutzer' auf Null oder Standard überschreiben. – kxxoling