0

假设您已经有一个复杂的 HTML 表单,可能来自设计师、前端开发人员等。对于复杂的表单不使用动态表单(基于 Django 表单)是常见的做法吗?

我想做这样的事情:

1.) 创建自定义 HTML 表单。

2.) 通过 POST 请求捕获表单数据,将其放入对象/字典中。

3.) 对该数据进行一些操作,以使其成为 Django 表单可接受的格式。

4.) 将处理后的数据传递给表单对象,对其进行验证等...

这个问题的明确解决方案是什么?我应该对所有事情都使用 Django 的动态表单吗?如果没有 - 我该如何实现上述内容?

编辑:

我的部分问题与仅使用表单进行验证有关。我想我没有说清楚。这是我正在尝试做的事情:

模板.html

<form method="post">
    {% csrf_token %}
<input class="foo" name="bar" type="text" value=""/>
<!-- Some more fields, not rendered through Django form -->
<button type="submit">Create Object</button>
</form>

如您所见,除了csrf_token这里没有 Django 代码。我在视图中尝试做的是在我的视图中捕获 POST 中的数据,对数据进行一些更改,然后尝试将新数据绑定到表单(不确定是否可能):

视图.py

def my_view(request):
    # Some GET code

    if request.method == 'POST':
        form = ImportedForm(request.POST)
        form.data['foo'] = "newValue"
        # Now after changing the data, validate it...
4

2 回答 2

1

如果表单和模型匹配得很好,那么我将利用 ModelForm 功能。但大多数时候它不是那么整齐,所以,最典型的是,我按以下顺序做事:

  1. 创建一个包含所有字段定义的 django 表单
  2. 创建 django GET 视图以提供空表单
  3. 创建一个提供默认 html/form 的 html 模板
  4. 测试空白表格
  5. 创建 POST 例程以调用验证并保留已验证(错误)的表单
  6. 修改 django 表单以验证字段
  7. 修改 html 表单以提供错误消息
  8. 测试验证和错误消息
  9. 修改 POST 例程以处理有效表单并执行它应该执行的任何操作(可能涉及重定向和“感谢”视图/模板)
  10. 测试整个批次
  11. 让设计师放松模板

事实上,设计师会在早期的某些时候参与进来,但理论上我只是把它全部作为“白色”工作,然后添加所有花哨的东西。这包括 javascript 验证(即毕竟以上)。

于 2013-07-29T02:02:07.120 回答
0

我最终做了这样的事情。这很丑陋,可能不是正确的方法,但它确实有效......

if request.method == 'POST':
    try:
         # Create dictionary from POST data
         data = {
                    'foo': request.POST['foo'],
                    'foobar': request.POST['foobar'],
                }
     except:
         # Handle exceptions

     form = ImportedForm(data)
     if form.is_valid: 
         # Continue to validate and save
于 2013-07-29T07:52:29.847 回答