如何在Django视图中创建/访问动态表单字段?
我有一个系统,可以保存很多“记录”,现在需要加一个功能,能够生成所选记录的报告。
用户的操作流程是这样的:
- 点击“创建报告”
- 选择要包含在报告中的记录。
- 点击“提交”,然后就会显示报告。
从我的角度来看,我的想法是:
- 加载所有记录。
- 创建一个报告表单,这个表单会通过遍历第一步加载的所有记录,生成一个“布尔字段”(就是一个可以选择是或否的选项),代码大概是这样的:self.fields['cid_' + str(record.id)] = BooleanField()
- 返回HTML代码,期待能收到结果。
- 遍历所有以'cid_'开头的字段,创建一个要包含在报告中的记录ID列表。
- 把这些ID传给报告生成器。
但是在视图中,我无法用我想的方式访问表单数据。因为我不知道哪些记录ID是可用的(因为有些可能已经被删除了等),我需要这样访问:
{{form.fields['cid_'+str(record.id)']}}
但显然这样做是不合法的。
有没有人有什么建议?
1 个回答
1
如果我理解你的问题没错,你的答案在于使用合适的Django表单小部件。我给你举个例子。假设你有一个Django模型:-
class Record(models.Model):
name = models.CharField()
假设你为你的需求创建了一个自定义表单:-
class MyCustomForm(forms.Form):
records= forms.ModelMultipleChoiceField(queryset=Record.objects.all, widget=forms.CheckboxSelectMultiple)
假设你有以下视图:-
def myview(request):
if request.method == 'POST':
form = MyCustomForm(data=request.POST)
if form.is_valid():
#do what you want with your data
print form.cleaned_data['records']
#do what you want with your data
else:
form = MyCustomForm()
return render_to_response('mytemplate.html', {'form': form}, context_instance=RequestContext(request))
你的 mytemplate.html
可能看起来像这样:-
<div>
{{ form.records.label_tag }}
{{ form.records }}
</div>