私は、ModelFormに接続される大きなDjangoモデル(73フィールド)を持っています。フォームウィザードとフォームプレビュー投稿アプリの機能を組み合わせて使用したいと思います。DjangoフォームウィザードとModelFormによるプレビュー
つまり、フォームフィールドは複数のページに分割され、ユーザーはモデルインスタンスが作成される前にデータをレビュー/プレビューする機会があります。
このタイプのもの、またはサンプルコードのベストプラクティスはありますか?
私は、ModelFormに接続される大きなDjangoモデル(73フィールド)を持っています。フォームウィザードとフォームプレビュー投稿アプリの機能を組み合わせて使用したいと思います。DjangoフォームウィザードとModelFormによるプレビュー
つまり、フォームフィールドは複数のページに分割され、ユーザーはモデルインスタンスが作成される前にデータをレビュー/プレビューする機会があります。
このタイプのもの、またはサンプルコードのベストプラクティスはありますか?
私は最初のDjangoプロジェクトで同様のことをします。セッションベースのFormWizardを使用して、私はそれをカスタマイズして、ユーザーが任意の形式でデータのサブベーディングを停止できるようにしました。
この時点で、FormPreviewを使用して情報を表示したり、フォームを動的に生成してユーザーに表示することができます。データはセッションにとどまります。
あなたがコンテキストに全体の辞書を渡した後、あなたのテンプレートにアクセスすることができます:それは答えとにかく価値はない
# views.py
def get_context_data(self, **kwargs):
context = super(MyWizard, self).get_context_data(**kwargs)
context['all_data'] = self.get_all_cleaned_data()
return context
# template.html
{{ all_data }}
:ほとんどの些細な事柄を越えて何のためにフォームウィザードを使用して問題となる可能性がある(で少なくとも、それは私のためだった)。ここで一つのことがあります - フォームの '__init__'に渡されるものを明らかに(初期値の他に)制御することはできません。では、フォームの '__init__'に"インスタンス "キーワード引数をどのように指定しますか?もちろん、*方法は - 私は、例えば、必要なModelFormを継承し、 '__init__'をオーバーライドする内部クラスを宣言することによって解決します。次に、そのクラスを.form_listの要素に割り当てる必要があります。非常に明白ではありません... – shylent
... FormWizardを使用する場合は、このようなことをたくさん扱わなければなりません。私はFormWizardが悪いと言っているわけではありませんが、確かに使い方が簡単ではありません。 73フィールド?私は知っている、これはばかげて聞こえるかもしれませんが、おそらく、いくつかの小さなタスクでタスクを分割してタスクを単純化する方法がありますか?あなたのモデルを再構築し、それぞれのものと別々に扱うようにしますか? – shylent
フィードバックをお寄せいただきありがとうございます。 73フィールドは単純化されているかどうかはわかりません。それは私たちが収集する必要がある多くのデータです。 :-) –