Django - 使用ModelForm的属性和重新定义的字段?

时间:2018-03-04 07:00:42

标签: python django forms modelform

我一直在学习表单,现在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'对应,则将其添加到数据库中?

  1. ModelForm个实例中明确定义表单字段时会发生什么?

  2. 如何在ModelForm实例中添加包含模型字段信息的属性?

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

在类级别定义字段时,表单将使用该定义,而不是从模型字段创建一个。如果您想完全自定义字段,这是正确的做法。

你的第二个问题很难理解。保存不是“识别”任何东西。 form.save()返回模型的实例,您可以在其上正常设置任何字段值。