Kev*_*lia 10 python django django-forms
有没有办法制作一个实际上包含字段数组的django表单类?我有一个数据库,可以提出可变数量的问题来询问用户,每个问题都知道如何定义它的小部件......等等,我似乎无法将其连接到django表单.
我试过这个:
class MyForm(forms.Form):
question = []
questions = Question.objects.all()
for q in questions:
question.append(forms.CharField(max_length=100, label=q.questionText))
Run Code Online (Sandbox Code Playgroud)
但是当我创建一个新的实例时,这似乎并没有暴露我的问题列表MyForm
.有没有办法使用django表单获取可变数量的表单字段,还是超出了它可以做的范围?
ste*_*iot 12
您可以使用表单集,如果您的形式是相同的(包括其标签).例如
问题:__________________
问题:__________________
问题:__________________
我假设每个表单在这里只包含一个字段('问题'字段).此示例中有三种形式.
如果您需要单个表单中的动态数量的字段,那么您可以使用它__init__
来实现您想要的(注意:未经测试的代码!):
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
questions = kwargs.pop('questions')
super(MyForm, self).__init__(*args, **kwargs)
counter = 1
for q in questions:
self.fields['question-' + str(counter)] = forms.CharField(label=question)
counter += 1
Run Code Online (Sandbox Code Playgroud)
并且您将使用以下内容创建表单:
form = MyForm(questions=your_list_of_questions)
Run Code Online (Sandbox Code Playgroud)
你会发现这篇文章很有用:http://jacobian.org/writing/dynamic-form-generation/
当然可以!
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for i, q in enumerate(Question.objects.all()):
self.fields['%s_field' % i] = forms.CharField(max_length=100, label=q.questionText)
Run Code Online (Sandbox Code Playgroud)
注意:确保您的问题在电话之间订购..因为字段列表将在表单提交,收据等时重新填充.
如果数据是有序且静态的,那就不会有问题.
另外,您可能需要查看FormSet
s,一个可能更适合您的表单列表.
归档时间: |
|
查看次数: |
14176 次 |
最近记录: |