問題: 3 つの外部キーを持つデータベースがあり、毎日次のルールでユーザー入力を収集する必要があります。
今日の日付のデータが db に既に存在する場合は、データを取得して表示します。データは複数の行になりますが、各行は 3 つの外部キー (product、branch、merge_version) と date_created (auto_add=True) に基づいて一意にクエリされます。
クエリが何も返さなかった場合は、クラス インスタンスを持つオブジェクトを作成し、空の行を表示します
ユーザーが送信ボタンを 1 つクリックすると、次のルールに従ってデータベース内のデータが更新されます。
- 送信された各行について、データベースに既存の行が存在するかどうかを検証し、行がある場合は行を更新し、そうでない場合は新しい行を作成します
製品ごとにforループで複数のフォームインスタンスを作成し、辞書をテンプレートページに送信してみましたが、問題なく行が表示されます。
送信をクリックすると、request.POST が次の出力を返すため、最後の行のデータのみが保存されます。
QueryDict: {u'build_date': [u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'
2013-10-11'], u'cln': [u'5555', u'2222', u'2222', u'2222', u'2222', u'2222', u'2222', u'090909'], u'logs': [u'no logs', u'no logs', u'no logs', u'no logs', u'no logs', u'n
o logs', u'no logs', u'no logs'], u'rpmt_status': [u'R', u'R', u'R', u'R', u'R', u'R', u'R', u'R'], u'rpmt_result': [u'F', u'F', u'F', u'F', u'F', u'F', u'F', u'F'], u'com
ments': [u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg'], u'cbs_other_bugs': [u'666', u'666', u'666', u'666', u'666', u'666', u'666', u'666
'], u'build_num': [u'12345', u'4444', u'8888', u'8888', u'8888', u'8888', u'8888', u'080808'], u'cbs_merge_blocker': [u'76767', u'76767', u'76767', u'76767', u'76767', u'7
6767', u'76767', u'76767'], u'csrfmiddlewaretoken': [u'8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw'], u'cbs_waived': [u'89898', u'89898', u'89898', u'89898', u'89898', u'89898', u'89
898', u'89898']}
行ごとに個別の送信ボタンがある場合、以下の request.POST を取得します
QueryDict: {u'build_date': [u'2013-10-11'], u'cln': [u'23423'], u'logs': [u'no logs'], u'rpmt_status': [u'R'], u'rpmt_result': [u'F'], u'comments': [u'hghjg'], u'cbs_other_bugs': [u'666'], u'build_num': [u'12345'], u'cbs_merge_blocker': [u'76767'], u'csrfmiddlewaretoken': [u'8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw'], u'cbs_waived': [u'89898']}
しかし、データベース全体を 1 つの送信ボタンで保存したいと考えています。どこが間違っているのか教えてください。または、ModelForm を使用する以外に、この状況を処理する最善の方法はありますか?