Django的表单库具有表单集功能,允许您处理动态添加的表单。例如,如果您的应用程序具有书签列表,您可以使用表单集来处理表单集,以处理多个表单,每个表单都代表一个书签。
如果要动态地向表单添加字段,该怎么办?一个示例是调查创建页面,您可以在其中动态添加无限数量的问题。你如何在Django中处理这个问题?
答案 0 :(得分:7)
请看Django最初的创始人之一Jacob Kaplan-Moss最近发表的这篇文章:"Dynamic form generation"。它使用一个示例逐步向您显示该过程。好读。
还有a 2008 article by James Bennett,Django的发布经理。
答案 1 :(得分:5)
要添加,删除和更改Form或ModelForm上的字段,只需覆盖__init__()
,如下所示:
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
other_stuff = kwargs.pop('stuff')
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_dynamic_field'] = forms.Field(...)
# Add fields based on user or other_stuff
并使用它:form = MyForm(user = user, stuff = stuff)
答案 2 :(得分:5)
在python中,您可以动态地实例化一个类。 knutin展示了一个动态自定义表单的好例子,并添加了几个字段。
您也可以动态创建整个表单,取自example given by James Bennett:
def make_contact_form(user):
fields = { 'name': forms.CharField(max_length=50),
'email': forms.EmailField(),
'message': forms.CharField(widget=forms.Textarea) }
if not user.is_authenticated():
fields['captcha'] = CaptchaField()
return type('ContactForm', (forms.BaseForm,), { 'base_fields': fields })