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

Django - attributes and redefined fields with a ModelForm?

我一直在学习表单的工作原理,现在 ModelForms

Max Goodridge 的视频中,他在 ModelForm class 中为他的 ModelFields 之一重新定义了一个字段。也就是说,他手动向他的 ModelForm class 添加了一个字段,该字段本可以由 ModelForm 框架自动生成。从我到目前为止所阅读和理解的内容来看,这可能是需要避免的事情。不过,这不是我的问题所在。

我想知道如何在 ModelForm class 中重新定义字段。在 Django 文档中,声明(通过示例)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 实例中添加包含模型字段信息的属性?

谢谢!

当您在 class 级别定义字段时,表单将使用该定义而不是从模型字段创建一个。如果您想完全自定义一个字段,这绝对不是要避免的事情,而是正确的做法。

你的第二个问题比较难懂。保存不是 "recognising" 任何东西。 form.save() returns 模型的实例,您可以在其上正常设置任何字段值。