仅使用表单进行验证

时间:2013-07-29 01:48:05

标签: django django-forms

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

我想做这样的事情:

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

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

3.。)对这些数据进行一些操作,以Django格式接受的格式获取它。

4。)将操纵数据传递给表单对象,验证它等等......

这个问题有什么明确的解决方案?我应该使用Django的动态表单吗?如果不是 - 我该如何实现上述目标?

编辑:

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

template.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中的数据,对数据进行一些更改,然后尝试将新数据绑定到表单(不确定是否可能):

views.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...

2 个答案:

答案 0 :(得分:1)

如果表单和模型很好地匹配,那么我将利用ModelForm功能。 但大部分时间它都不是那么整洁,最典型的是,我按照这个顺序做事:

  1. 创建包含所有字段定义的django表单
  2. 创建django GET视图以提供空表单
  3. 创建一个提供默认html / form
  4. 的html模板
  5. 测试空白表格
  6. 创建POST例程以调用验证并保留已验证(错误)的表单
  7. 修改django表单以验证字段
  8. 修改html表单以提供错误消息
  9. 测试验证和错误消息
  10. 修改POST例程以处理有效的表单并执行它应该做的任何事情(可能涉及重定向和'谢谢'视图/模板)
  11. 测试整批
  12. 让设计师放松模板
  13. 事实上,设计师将在早期的某些方面参与其中,但理论上我只是把它作为一个“白色”工作,然后添加所有花哨的东西。这包括javascript验证(即完成上述所有操作后)。

答案 1 :(得分: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