我一直在学习如何形式,现在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
实例中添加包含模型字段信息的属性?谢谢!
在类级别定义字段时,表单将使用该定义,而不是从模型字段创建一个。如果您想完全自定义字段,这是正确的做法。
你的第二个问题很难理解。保存不是“识别”任何东西。 form.save()
返回模型的实例,您可以在其上设置任何字段值。