是否可以使用Django表单使用可变数量的字段?
具体的应用是这样的:
用户可以在图像上传表单上上传任意数量的图片。图片上传后,将带到页面上,在页面上可以给图片起一个名称和描述。图片的数量将取决于用户选择上传的数量。
那么, 如何让django使用可变数量的输入字段来生成表单 (必要时可以将其作为参数传递)?
编辑: 自写杰夫·鲍尔的答案中提到的文章以来,有些事情已经改变。
即这行代码似乎不起作用:
# 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 })
note标记不是django的一部分,但它是免费的并且非常有用。检查一下:django- tagging
是的,可以在Django中动态创建表单。您甚至可以将动态字段与普通字段混合和匹配。
class EligibilityForm(forms.Form): def __init__(self, *args, **kwargs): super(EligibilityForm, self).__init__(*args, **kwargs) # dynamic fields here ... self.fields['plan_id'] = CharField() # normal fields here ... date_requested = DateField()
有关此技术的详细说明,请参阅James Bennett的文章: 因此,您需要动态表单吗?
http://www.b-list.org/weblog/2008/nov/09/dynamic- forms/