2012-07-28 7 views
6

Ich habe die Möglichkeit, Tags in einem Formular zu senden. Wenn das Formular abgeschickt wird, ich sehe:Django-Array-Wert in einem Formular

tags=['3','4','5']

Die Tag-Werte-IDs sind für das, was der Benutzer ausgewählt hat. Ich bin in der Lage, die Werte aus dem request.POST Objekt zu bekommen und alles ist in Ordnung. Problem ist, dass der Benutzer ATLEAST ein Tag auswählen muss. Und ich möchte die Validierung in einer Django-Form durchführen, aber ich bin nicht sicher, welche Art von Formularfeldwert in der Django-Form zu liefern ist? Normalerweise verwende ich CharField, DateField, etc. Aber was existiert, um den Array-Wert zu erhalten? Und dann kann ich eine clean Funktion dafür liefern. Vielen Dank!

Antwort

4

Versuchen Sie django.forms.MultipleChoiceField(). Siehe https://docs.djangoproject.com/en/dev/ref/forms/fields/#multiplechoicefield

known_tags = (
    (1, 'Choice 1'), (2, 'Choice 2'), (3, 'Choice 3'), 
    (4, 'Choice 4'), (5, 'Choice 5')) 

class MyForm(django.forms.Form): 
    tags = django.forms.MultipleChoiceField(choices=known_tags, required=True) 

EDIT 1:

Wenn das, was Sie wollen, ist ein Textfeld in ein Array zu drehen ...

class MyForm(django.forms.Form): 
    tags = django.forms.CharField(required=True) 

    def clean_tags(self): 
     """Split the tags string on whitespace and return a list""" 
     return self.cleaned_data['tags'].strip().split() 
+1

Nein, würde dies nicht funktionieren. Ich habe keine "Bekannten Tags". Ich habe eine Tabelle in der Datenbank, so dass die Tags alles auf dieser Tabelle sein können. – KVISH

+1

Das Auswahltupel ist nur ein Beispiel. Sie können die Daten aus Ihrer Datenbank abrufen und die Liste erstellen. Oder sagen Sie, dass Sie Benutzern erlauben, Text einzugeben (anstatt aus einer Liste auszuwählen)? –

+0

Ja, Benutzer können Text eingeben ... Weil diese Werte von Tags sind. – KVISH

Verwandte Themen