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

ありがとう!

UPDATE を実行するform.storyId = xyzと、テンプレートに渡された値が表示されません。

form.initial['storyId'] = xyz

次に、テンプレートに渡された値が表示されます! 他のコードの変更はありませんか、何かアイデアはありますか?

4

2 に答える 2

1

パラメータ "initial" は、forms.Form クラスで一般的に使用され、フォームがレンダリングされるときに自動入力として表示する値を初期化します。

ModelForm の場合、フォームのinitメソッドから呼び出されるフィールドに自動入力する必要がある場合に initial が使用されます。

form = CommentForm()
form.storyId = xyz

上記のコードでは、値を Python インスタンスのプロパティに直接割り当てているため、プロパティの型も変更されます。

変数 storyId は実際には django.forms.fields.IntegerField であり、これには値を初期化する "initial" パラメータがあります。

form.storyId=xyz を割り当てると、storyId は xyz の値を取得し、フォーム フィールドとしてレンダリングされません。

これが明確であることを願っています。

于 2012-06-06T10:48:40.813 に答える
1

Modelform は単なるクラスなので、modelform 変数にすぐにアクセスできます。イニシャルはいらない。

于 2012-06-06T10:35:06.497 に答える