2009-03-11 22 views
0

Ich benutze Django Admin für die Verwaltung meiner Daten. Ich habe eine Benutzer-, Gruppen- und Domänen-Tabellen Benutzer Tabelle hat viele zu viele Beziehung mit Gruppen und Domänen Tabellen. Die Domänen-Tabelle hat eine Beziehung zwischen einer und vielen Gruppen. und wenn ich die Benutzerdaten über Admin speichere, brauche ich auch einige zusätzliche Datenbankaktualisierungen in der Tabelle users_group und der Tabelle users_domains. Wie mache ich das? Wo gebe ich den Code ein? Danke.Django Admin

Antwort

2

Ich glaube, Sie suchen nach InlineModels. Mit ihnen können Sie verwandte Modelle auf derselben Seite wie das übergeordnete Modell bearbeiten. Wenn Sie nach einer besseren Kontrolle suchen, können Sie ModelAdmin save methods überschreiben.

Überprüfen Sie auch immer die Manual, wenn Sie etwas brauchen. Es ist wirklich ziemlich gut.

+0

Paolo: Sieht aus wie ich die Methode speichern außer Kraft setzen müssen. Wie ich bereits erwähnt habe, muss ich ein paar Datenbanktabellen aktualisieren ... und den Rest der Operationen wie gewohnt ausführen lassen. Wie mache ich das. Danke –

+0

Schauen Sie sich das Beispiel in der Dokumentation an. Definieren Sie einfach eine Funktion namens save_model in der AdminModel-Klasse und tun Sie, was Sie dort brauchen. –

+0

Ich spielte gerade mit save_model herum. Sieht so aus, als ob die hier eingegebenen Anweisungen ausgeführt werden und die Sicherungsoperation folgt, auch wenn ich save() nicht explizit aufruft. Ist das das richtige Verhalten? Ich kann keine weitere Dokumentation auf der Django-Website finden. Vielen Dank. –

0

Die beste Methode zum Aktualisieren anderer Datenbanktabellen besteht darin, die erforderlichen Vorgänge zum Abrufen und Speichern auszuführen. Wenn Sie jedoch eine Viele-zu-Viele-Beziehung haben, können beide Seiten der Beziehung standardmäßig über einen _set-Parameter aufgerufen werden. Das heißt, user.group_set.all() gibt Ihnen alle Gruppenobjekte, die einem Benutzer zugeordnet sind, während group.user_set.all() Ihnen alle Benutzerobjekte zuweist, die einer Gruppe zugeordnet sind. Also, wenn Sie die Methode speichern außer Kraft setzen (oder ein Signal Hörer registrieren - je nachdem, was Option stilistisch gefälliger klingt), versuchen Sie:

for group in user.group_set.all(): 
    #play with group object 
    .... 
    group.save()