假设您已经拥有一个复杂的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...
答案 0 :(得分:1)
如果表单和模型很好地匹配,那么我将利用ModelForm功能。 但大部分时间它都不是那么整洁,最典型的是,我按照这个顺序做事:
事实上,设计师将在早期的某些方面参与其中,但理论上我只是把它作为一个“白色”工作,然后添加所有花哨的东西。这包括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