2009-03-09 12 views
2

Ich bin durch die Liste der Formularfelder iterieren. Wie identifiziere ich den Typ jedes Feldes? Für Checkbox kann ich field.is_checkbox aufrufen ... gibt es ähnliche Methoden für Listen, multiplechoicefields etc.?Formularfeld-API?

Dank

+0

Sie haben die Quelle. Warum musst du das tun? –

Antwort

-1

Vorausgesetzt, Sie HTML hier verwenden ... Denn es ist nicht ganz klar.

Wie wäre es mit einer zusätzlichen Klasse?

Und wenn Sie nicht allready wissen, das Klassenattribut wird dies erkennen:

class="hello there you" 

als 3 Klassen mit. Die Klasse 'Hallo', die Klasse 'dort' und die Klasse 'du'. Wenn sie also bereits eine Klasse haben, fügen Sie einfach ein Leerzeichen und Ihren benutzerdefinierten Klassennamen hinzu.

3

Werfen Sie einen Blick auf die Klasse für jedes Feld auf dem Formular:

for f_name, f_type in my_form_instance.fields.items(): 
    print "I am a ",type(f_type) 
    # or f_type.__class__ 

Diese Ausgabe ähnlich <class 'django.forms.fields.BooleanField'> produzieren wird.

Sie können den Namen als einfache Zeichenfolge erhalten, wenn Sie das bevorzugen, mit:

print type(f_type).__name__ 
# produces 'BooleanField' 

Edit: Auch vorsichtig sein, über die Unterscheidung zwischen einem Feld und einem Widget. In Django gibt es kein Kontrollkästchen, sondern nur ein CheckboxInput-Widget, das für ein BooleanField standardmäßig verwendet wird. Wollen Sie das Widget (das sehr rendernspezifisch ist) oder das Feld (das mehr mit dem Datentyp und der Validierung für dieses Formularfeld in Beziehung steht) nachschlagen? Wenn das Widget, können Sie den Widget-Typ mit:

f_type.widget 

Hope, dass hilft!

1

Ich bin nicht sicher, ob dies ist, was Sie wollen, aber wenn Sie wissen wollen, welche Art von Feld, um es in der HTML, um am Ende wird, können Sie es mit dieser Prüfung:

{% for field in form %} 
    {{ field.field.widget.input_type }} 
{% endfor %} 

widget.input_type enthält Text, Passwort, Auswahl usw.

PS Ich wusste das erst vor 5 Sekunden. #django irc.freenode.net hat immer gute Hilfe.