Ist es möglich, eine variable Anzahl von Feldern mit Django-Formularen zu haben?Variable Anzahl von Eingängen mit Django-Formen möglich?
Die spezifische Anwendung ist dies:
Ein Benutzer kann so viele Bilder hochladen, wie sie auf dem Bild-Upload-Formular möchten. Sobald die Bilder hochgeladen sind, werden sie auf eine Seite gebracht, wo sie den Bildern einen Namen und eine Beschreibung geben können. Die Anzahl der Bilder hängt davon ab, wie viele Nutzer der Upload gewählt hat.
So Wie bekomme ich Django, um ein Formular mit einer variablen Anzahl von Eingabefeldern (die als Argument übergeben werden könnte, wenn nötig) zu generieren?
bearbeiten: ein paar Dinge haben sich geändert, seit die article mentioned in jeff bauer's answer geschrieben wurde.
nämlich diese Codezeile, die nicht zu funktionieren scheint:
# BAD CODE DO NOT USE!!!
return type('ContactForm', [forms.BaseForm], { 'base_fields': fields })
Also hier ist, was ich mit ...
Die Antwort habe ich kam:
from tagging.forms import TagField
from django import forms
def make_tagPhotos_form(photoIdList):
"Expects a LIST of photo objects (ie. photo_sharing.models.photo)"
fields = {}
for id in photoIdList:
id = str(id)
fields[id+'_name'] = forms.CharField()
fields[id+'_tags'] = TagField()
fields[id+'_description'] = forms.CharField(widget=forms.Textarea)
return type('tagPhotos', (forms.BaseForm,), { 'base_fields': fields })
Hinweis Tagging ist nicht Teil von Django, aber es ist kostenlos und sehr nützlich. Check it out: django-tagging
gab man fast die akzeptierte Antwort, Jeffs war nur ein wenig klarer (der Link sehr geholfen) – Jiaaro