2017-08-22 4 views
0

チュートリアルポーリングアプリケーションの単純で論理的な拡張は、1つの 'submit'ボタンでページあたりいくつかの質問を表示します。私は、マルチフィールドの質問にはModelFormsを使用するが、単一フィールドの質問には個別にレンダリングされたフィールドを使用するハイブリッドデザインがあります。私はフォームが動作するようになっている方法についての基本的な何かを見逃している感覚を持っているDjango - ForeignKeyとその値によってインデックスされたレンダリングされたモデルフォーム

{% load custom_tags %} 
{% block question_set %} 

<form action="{% url 'polls:answer' user.username %}" method="POST"> 
    {% csrf_token %} 
{% for question in page_question_list %} 
<hr/> 

    {% if question.answer_type == "CH" %} 
    {% include "polls/Choice_Answer_form.html" %} {%endif%} 

    {% if question.answer_type == "SA" %} 
    {% include "polls/Short_Answer_form.html" %} {%endif%} 

    {% if question.answer_type == "LA" %} 
    {% include "polls/Long_Answer_form.html" %} {%endif%} 

    {% if question.answer_type == "E3" %} 
    {% include "polls/EJ_Answer_form.html" with form=forms|get_item:question%} 
    {%endif%} 

    {% if question.answer_type == "E4" %} 
    {% include "polls/EJ_Answer_form.html" with form=forms|get_item:question%} 
    {%endif%} 

    {% if question.answer_type == "BS" %} 
    {% include "polls/brainstorm_form.html" %} 
    {% endif %} 

{% endfor %} 
    <br/> 
    <hr/> 
    <input type="submit" value="Submit" /> 
</form> 

{% endblock %} 

:だから標準question_setページはによってレンダリングされます。 ModelFormオブジェクトを作成してレンダリングするために送信すると、そのモデルに対応するインスタンス(私の場合は質問番号とuser_id)がわかります。ブラウザから戻ってくると、無効にしたり、読み取り専用、または非表示(id、pkなど)のフィールドがあると、その情報はなくなります。あなたはその情報をURLに入れることができますが、各ページの1行のデータを扱うのであれば実現可能です。ドキュメントでは、ModelForm(request = request、instance = instance)の使い方をうまく示していますが、要求とインスタンスが同期するように設計する方法はわかりません。

私がに見てきたいくつかの戦略:フォームセットとuse the 'prefix' to differentiate them

バンドルに必要なフォーム。質問番号の関連付けがレンダリングのために保持できる(疑わしい)か、まだPOSTデータからドロップされている(疑わしい)と疑われているかどうかは不明です。

レンダリングされたフィールド名を変更して、html名前空間でオーバーラップするのを防ぐためのキー情報(質問番号、ユーザー)と最後の値のみを変更します(e.g. generate a new field for the form with the data in it to be rendered and presumably passed back)。

フォーム 'auto_id'(docsを参照)の文字列を使用して、すべてのフィールドに質問番号をエンコードする一意の名前を付けます。これは、フォームセット内のプロによる冗長性と扱い方が優れていますが、

私はおそらく最も簡単で最善の方法を試したいと思うでしょう。感謝の意をもってアドバイスを受けました。

(私はたくさんより多くのリンクを持っていたが、これほど少ないの状況とそれらを掲示することは許されないのです)

答えて

0

私はそのロードを発見し、「プレフィックス」からの質問番号を取得する(しかしauto_idない)フィールドを文字列としては、各フォームの "qNN#"は機能します(プレフィックスが要素名に適用され、auto_idがIDに適用され、POSTデータが使用する名前に適用されるため)。私はこの論理を 'views.py'に入れました

投稿フォームをキャッチするビューは、request.POSTのキーを調べなければなりません。qで始まるキーが見つかると、フィールドから来て、リクエストと+プレフィックスからフォームを作成するための質問を出します。

これは、繰り返されるグループとして送信するのではなく、見つかるform_dataがあるたびにrequest.POSTが私のform_instantiatorヘルパー関数に送られることを意味します。

私は何とかジャンゴの残酷さを感じます。

関連する問題