これまでにこの問題について投稿しましたが、まだ解決策が見つかりませんでしたので、今回はもっとうまくいくと思っています。Django上書き保存されたフォームデータ
私はユーザーが入力したデータを受け取るフォームを持っています。別のページでは、編集目的でユーザーが入力したフォームと同じフォームを作成しています(その情報があらかじめ入力されています)。ユーザーは、すでに入力した情報を編集するためにこのページに来るでしょう。私の問題は、インスタンスを上書きしていないことです。
def edit(request):
a = request.session.get('a', None)
if a is None:
raise Http404('a was not found')
if request.method == 'POST':
form = Name_Form(request.POST, instance=a)
if form.is_valid():
j = form.save(commit=False)
j.save()
else:
form = Name_Form(instance = a)
このフォームでは、いくつかの値に "unique_together"を使用しています。テンプレートの `{{form.non_field_errors}}も呼びます。
編集ビューで変更を加えたときに、フィールドの変更に「unique_together」で定義されたものが含まれている場合、インスタンスがすでに存在することを示すエラーが返されます。それ以外の場合は、新しいインスタンスが保存されます。それは上書きされません。
私がunique_togetherを使用している理由は、ユーザーが最初に同じフォームを2回入力するのを防ぐためです(編集段階の前に、最初の入力ビューで)。
アイデア?
EDIT: "a"は、使用可能なすべてのインスタンスのドロップダウンボックスを含むセッションを指します。これは、ユーザーが編集したいインスタンスを示します。 `
、あなたがセッションに追加する前に、あなたは「」データベースに保存されていますか? a.idを印刷するとどうなりますか(私は 'None'と思われます) – Alasdair
はい、それらはデータベースに保存されています。印刷すると実際に私にIDだけが与えられます。それだけでなく、正常ですaのすべてのフィールドでフォームをあらかじめ準備しておくので、間違いなくそれを運んでいます。 – JohnnyCash
"a"は、ユーザーが選択する別のビューのドロップダウンボックスを参照します。これは、編集したいインスタンスを示します。 – JohnnyCash