2010-11-22 8 views
0

in meiner Benutzerverwaltung für jede einzelne Seite, neben den Standard-Django Fieldsets, habe ich auch zwei andere Inline (UserProfile und ein Modell namens "Extension"). Wenn ich jedoch Felder in der Extension inline ändere, möchte ich auch alle diese Felder bearbeiten/validieren können.Django Daten Validierung in Form (Admin/Auth/Benutzer)

Userprofile:

user = models.ForeignKey(User, unique=True) 
client = models.ForeignKey(Client) 

Erweiterung:

user = models.ForeignKey(User) 
date_created = models.DateTimeField(auto_now_add=True, auto_now=True) 
number = models.CharField(max_length=16, unique=False) 

Zum Beispiel, wenn ich ein Benutzerdurchwahlnummern bearbeiten, möchte ich in jedem Feld, um alle Werte greifen können (die dynamisch). Im Moment bin ich mit self.data [ „“] wie folgt aus:

extension_fields = [self.data["extension_set-0-number"], 
        self.data["extension_set-1-number"], 
        self.data["extension_set-2-number"]] 

Ein Problem stellt dies ist, dass ich gehe davon aus es wird immer nur sein 3 Felder für die Erweiterung, was nicht immer der Fall ist. Wie kann ich jedes Inline-Feld korrekt durchlaufen?

+0

Wie fügen Sie dies jetzt als Inlines zum Benutzerformular hinzu? Das betrifft, wie Sie die Validierung usw. verwenden können. –

+0

Erweiterung und UserProfile sind separate Modelle in meinem models.py und ich erweitere sie in admin.py. Extension hat einen Fremdschlüssel für User und UserProfile für Benutzer und einen Client. – chiurox

Antwort

1

Wie kann ich jedes Inline-Feld korrekt durchlaufen?

Sie können eine list comprehension eine Schleife durch sie verwenden:

extension_fields = [self.data[k] for k in self.data.keys() if 'extension_set' in k] 

Ich bin nicht ganz überzeugt, dass dies der richtige Weg ist, dies jedoch zu implementieren. Sie haben nicht genügend Beispielcode angegeben, um zu erklären, was genau Sie tun. Wenn Sie versuchen, diese Daten zu verarbeiten und zu validieren, sollte Django dies für Sie tun (wahrscheinlich unter Verwendung einer ModelForm). Sie sollten das nicht selbst hartcodieren müssen.