0

我有一个像这样的模型:

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

或者在模型的初始化中我需要这个:

self.initial['storyId'] = xyz

“最初”在做什么?为什么我不能直接去:

form = CommentForm()
form.storyId = xyz

谢谢!

更新如果我运行form.storyId = xyz,那么在模板中,我将看不到传入的值。如果我运行

form.initial['storyId'] = xyz

然后在模板中我确实看到了传入的值!没有其他代码更改,有什么想法吗?

4

2 回答 2

1

Modelform 只是一个类,因此您可以直接访问 modelform 变量。不需要首发。

于 2012-06-06T10:35:06.497 回答
1

参数“initial”在 forms.Form 类中使用,通常用于在呈现表单时初始化您希望看到的自动填充值。

在 ModelForm 的情况下,当您需要自动填充从表单的init方法调用的字段时使用初始值。

form = CommentForm()
form.storyId = xyz

在上面的代码中,您直接将值分配给 Python 实例的属性,然后属性的类型也会发生变化。

变量storyId实际上是一个django.forms.fields.IntegerField,它有一个参数“initial”来初始化这个值。

一旦你指定了 form.storyId=xyz,那么 storyId 就取 xyz 的值,并且不会被渲染为一个表单域。

我希望这很清楚。

于 2012-06-06T10:48:40.813 回答