我有一个像这样的模型:
class CommentForm(forms.ModelForm):
storyId = forms.IntegerField(required=True, widget=forms.HiddenInput())
postId = forms.IntegerField(required=True, widget=forms.HiddenInput())
所以现在我想改变“storyId”的价值
我发现,在我的代码中我需要这样做:
form = CommentForm()
form.initial['storyId'] = xyz
或模型的 init 我需要这个:
self.initial['storyId'] = xyz
什么是“初始”做什么?为什么我不能直接去:
form = CommentForm()
form.storyId = xyz
谢谢!
更新如果我运行form.storyId = xyz
,那么在模板中,我将看不到传入的值。如果我运行
form.initial['storyId'] = xyz
然后在模板中我做看到传入的值!没有其他代码更改,任何想法?
答案 0 :(得分:1)
Modelform只是一个类,所以你可以直接访问modelform变量。没有必要进行初始化。
答案 1 :(得分:1)
参数“initial”在forms.Form类中使用,通常用于初始化您希望在呈现表单时自动填充的值。
对于ModelForm,当您需要自动填充从表单的 init 方法调用的字段时,使用initial。
form = CommentForm()
form.storyId = xyz
在上面的代码中,您直接将值分配给Python实例的属性,然后属性的类型也会更改。
变量storyId实际上是一个django.forms.fields.IntegerField,它有一个初始化值的参数“initial”。
一旦你指定了form.storyId = xyz,那么storyId将获取xyz的值,并且不会被渲染为表单字段。
我希望这很清楚。