Felder und base_fields - Django

Beim erstellen einer flatpage, möchte ich den Benutzer wählen Sie eine Vorlage aus einer vordefinierten Liste. Um die Flatpage Modell unberührt, ich bevorzuge ChoiceField über ModelChoiceField (letztere bietet die PK von der Vorlage, aber ich brauche den Namen für das Feld Vorlagenname):

class NewFlatpageForm(FlatpageForm):

    template_name = forms.ChoiceField(choices = [])
    def __init__(self, *args, **kwargs):
        self.base_fields['template_name'].choices = ProjectTemplate.objects.values_list('path', 'name')
        super(NewFlatpageForm, self).__init__(*args, **kwargs)

Ich überschreiben __init__ oder Django füllt Entscheidungen, die auf dem server starten und nicht aktualisieren die Liste dann.

Habe ich keine admin Erfahrung, aber ich habe ähnliche Dinge mit den fields - Attribut, wenn Sie nicht mit admin. Aber in diesem Fall habe ich eine Ausnahme erzählen fields ist nicht ein Attribut des Formulars. __dict__ zeigte mir, es gibt eine base_fields Attribut und es funktioniert. Also, warum verwenden base_fields hier, und warum ist fields nicht anwesend ist, und endlich mache ich etwas hacky?

InformationsquelleAutor shanyu | 2010-01-26
Schreibe einen Kommentar