我一直在学习表单,现在ModelForms
如何工作。
在Max Goodridge的视频中,他为ModelFields
课程中的ModelForm
之一重新定义了一个字段。也就是说,他手动将一个字段添加到ModelForm
类中,该字段可以由ModelForm
框架自动生成。从我到目前为止所阅读和理解的内容来看,这可能是需要避免的。虽然,这不是我的问题所在。
我想知道ModelForm类中的重新定义字段是如何工作的。在Django Docs中,(通过示例)声明ModelForm实例将为指定的每个模型字段提供一个表单字段。当在ModelForm实例中显式定义表单字段时会发生什么?是否生成了两个字段,或者ModelForm是否识别出已经定义了一个字段,从而没有生成另一个字段?
此外,在视图中向ModelForm实例添加属性究竟做了什么?例如,我已经看到了这个:
form = ExampleForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user # herein lies my confusion
post.save()
这到底发生了什么?我见过人们这样做并添加时间戳,但我不明白它究竟是做什么的。据推测,.save()
方法识别属性名称'user',如果名称与模型字段名称'user'对应,则将其添加到数据库中?
在ModelForm
个实例中明确定义表单字段时会发生什么?
如何在ModelForm
实例中添加包含模型字段信息的属性?
谢谢!
答案 0 :(得分:1)
在类级别定义字段时,表单将使用该定义,而不是从模型字段创建一个。如果您想完全自定义字段,这是正确的做法。
你的第二个问题很难理解。保存不是“识别”任何东西。 form.save()
返回模型的实例,您可以在其上正常设置任何字段值。