0

Django で奇妙な問題が発生しています。クラス ベースのビューがどのように機能するかを正しく理解していないことが原因である可能性があります。

基本的に、ListView と FormView があります。1 つはオブジェクトをリストすることで、もう 1 つは編集することです。

ブラウザで、リストビューから既存のオブジェクトのフォームビューに移動すると、期待どおりの結果が得られます。フォーム フィールドに期待値が入力されます。

ユーザーがオブジェクトを作成できる空白のフォームを表示するために、同じフォームビューが使用されます。
既存のオブジェクトのフォームから新しいオブジェクトのフォームビュー、またはリストビューに移動してから新しいオブジェクトのフォームビューに移動すると、初期 (つまり、CBV の self.initial) に既存のオブジェクトからの情報が事前に取り込まれます。訪れました。
明らかに、新しい get 要求の開始時に self.initial が空白になることを期待しています。

私の理解では、各リクエストはクラスベースのビューの新しいインスタンスを生成します。初期取得はリクエスト間でどのように引き継がれますか? いくつかのデバッグに基づいて、この結論に達しています。以下の get_initial() の関連行。

def get_initial(self, **kwargs):
    initial = super(M_EditNewsletterView, self).get_initial(**kwargs)       
    fs_logger.debug('initial immediately after super -> %s' % initial)

SOはこれが似ていることを示唆しましたが、賛成票の答えがわかりません。 Django(trunk) およびクラス ベースのジェネリック ビュー: あるフォームの初期データが別のフォームに表示される

誰が私に何が起こっているのか説明するのを助けることができますか?

4

1 に答える 1

1

get_initialinitialクラスのプロパティに基づいて値を返すだけです。推測ですが、initialこのように設定していますか?

いえ

class M_EditNewsletterView(FormView):
    #this value will essentially be constant as it belongs to the 
    #class, not the instance
    initial = get_my_value()

「get_initial」メソッドを自分でオーバーライドする必要があります。

def get_initial(self, **kwargs):
    return get_my_value()
于 2012-06-10T20:56:31.907 に答える