繁体   English   中英

如何在View中创建/访问Django中的动态表单字段?

[英]How do I create / access dynamic form fields in Django from within a View?

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

对于用户,它看起来像这样:

  1. 点击“创建报告”
  2. 选择要包含在报告中的记录。
  3. 点击“提交”,显示报告。

对我来说,我认为:

  1. 加载所有记录。
  2. 通过遍历第1部分中的所有记录并使用类似以下代码的代码,创建一个生成“ BooleanField”的ReportForm:self.fields ['cid_'+ str(record.id)] = BooleanField()
  3. 返回HTML,期待它返回。
  4. 遍历以“ cid_”开头的所有字段,并创建要包含在报告中的记录ID的列表。
  5. 将数字传递给报告生成器。

但是从视图内部,我无法以想象的唯一方式访问表单数据。 由于我不知道哪个记录ID可用(因为某些记录ID可能已被删除,等等),我需要像这样访问它:

{{form.fields ['cid _'+ str(record.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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM