【问题标题】:How do I create / access dynamic form fields in Django from within a View?如何从视图中创建/访问 Django 中的动态表单字段?
【发布时间】:2011-03-22 11:56:16
【问题描述】:

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

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

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

我认为:

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

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

{{form.fields['cid_'+str(record.id)']}}

但显然这是非法的。

有人有什么建议吗?

【问题讨论】:

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

标签: python django forms dynamic views


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2022-01-23
    • 1970-01-01
    • 2020-11-09
    • 2020-05-11
    • 2013-06-08
    相关资源
    最近更新 更多