我有一个(非常复杂的)充满逻辑的HTML表单,它根据selectpickers
中的不同选项触发,其中的字段与Django模型中的相应字段名称完全相同,有时我担心在从HTML表单发送到Django模型的数据时需要添加一些逻辑。我意识到我可能不会在Django中使用ModelForm
来处理这个问题,并且一直在寻找使用标准django.forms.Form
将HTML表单映射到我的模型的一些示例,但我还没有真的发现了很多。有人可以给我一些提示吗?
答案 0 :(得分:1)
听起来好像你的html表单已经存在,并且你想以某种方式读取该表单中的POST数据。没有做任何进一步假设你如何在没有django ModelForm的情况下结束html表单或者通过视图输出forms.Form - 只要表单操作位置通过路由映射到视图 - 视图就可以处理request.POST数据。如果您没有使用django表单(基于模型或表单),那么django的所有表单验证优点都在门外,您必须在视图中进行自己的验证。表单数据验证后,初始化模型对象,如下所示:my_obj = ModelName(field_name1 = form_input_data1,field_name2 = form_input_data2,...)就是这样。然后你可以做my_obj.save()。
现在让我们说,它并不是那么糟糕。您实际上正在使用forms.Form继承来创建与模型没有直接关系的django-istic表单类。现在您可以使用表单相关的验证clean_field和清理步骤等...以及内部验证django自动执行的所有内置字段类型。然后,当您读入POST数据时 - 执行将表单字段(根据需要通过任何转换)映射到您尝试构建的django模型对象所需的一切,记住默认值和任何模型保存可能的自定义分配发生。
答案 1 :(得分:0)
您不能只将html表单映射到django模型中。您需要先创建一个模型表单,然后在html中进行渲染。
如果你想以某种方式将你的html表单映射到模型。首先在html中渲染ModelForm。创建django表单的html格式的精确副本,并在html中使用它。在您的视图中捕获并像模型一样处理它。但无论如何你必须创建ModelForm。