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

问题描述 投票:0回答:1

我一直在学习如何形式,现在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实例中添加包含模型字段信息的属性?

谢谢!

python django forms modelform
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.