Можно ли иметь переменное количество полей, используя формы django?
Конкретное приложение это:
Пользователь может загрузить столько изображений, сколько он хочет, в форме загрузки изображений. Как только изображения загружены, они переносятся на страницу, где они могут дать фотографиям имя и описание. Количество картинок будет зависеть от того, сколько пользователь выбрал для загрузки.
Итак, как мне заставить django сгенерировать форму, используя переменное число полей ввода (которые могут быть переданы в качестве аргумента при необходимости)?
edit: С момента написания статьи , упомянутой в ответе Джеффа Бауэра , произошли некоторые изменения.
А именно эта строка кода, которая не работает:
# BAD CODE DO NOT USE!!!
return type('ContactForm', [forms.BaseForm], { 'base_fields': fields })
Итак, вот что я придумала ...
Ответ, который я использовал:
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 })
заметка не является частью django, но она бесплатна и очень полезна. проверить это: django-tagging