Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从视图中创建/访问Django中的动态表单字段?_Python_Django_Forms_Dynamic_Views - Fatal编程技术网

Python 如何从视图中创建/访问Django中的动态表单字段?

Python 如何从视图中创建/访问Django中的动态表单字段?,python,django,forms,dynamic,views,Python,Django,Forms,Dynamic,Views,我有一个保存大量记录的系统,需要集成一个组件,该组件将生成任何选定记录的报告 对于用户来说,它是这样的: 单击创建报告 选择要包含在报告中的记录。 点击Submit并显示报告。 我认为: 加载所有记录。 创建一个ReportForm,通过迭代第1部分中的所有记录并使用如下代码生成BooleanField:self.fields['cid_'+strrecord.id]=BooleanField 返回HTML,期待它返回。 迭代以“cid_”开头的所有字段,并创建要包含在报告中的记录ID列表。 将

我有一个保存大量记录的系统,需要集成一个组件,该组件将生成任何选定记录的报告

对于用户来说,它是这样的:

单击创建报告 选择要包含在报告中的记录。 点击Submit并显示报告。 我认为:

加载所有记录。 创建一个ReportForm,通过迭代第1部分中的所有记录并使用如下代码生成BooleanField:self.fields['cid_'+strrecord.id]=BooleanField 返回HTML,期待它返回。 迭代以“cid_”开头的所有字段,并创建要包含在报告中的记录ID列表。 将数字传递给报表生成器。 但是在视图中,我无法以我能想象的唯一方式访问表单数据。因为我不知道哪些记录ID可用,因为有些可能已被删除,等等,所以我需要这样访问它:

{{form.fields['cid_'+strrecord.id']}

但显然这是非法的


有人有什么建议吗?

如果我正确理解您的问题,您的答案在于使用正确的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>

为了确保我理解:所以您想从报告中包含的记录列表中进行选择,但您不能简单地查询这些记录,因为从加载页面到开始报告的时间内,有些记录可能会被删除,等等?您可以轻松创建一个简单表单,该表单将作为复选框列出,例如所有记录。。如果你能准确地告诉我你想要什么,我可能能提供更多的帮助。这正是我想要做的-创建一个表格,将所有记录列为复选框。但我不能只做form.as\p,因为我有我想要使用的特定格式,所以我不知道我可以访问哪些字段。