web-dev-qa-db-ja.com

Django:ModelFormを使用して既存のデータベースエントリを編集する

データベースエントリを作成および編集できるようにModelFormクラスを作成しました。新しいエントリの作成はうまく機能しますが、ModelFormsを使用して既存のエントリを編集/更新する方法がわかりません。以下を使用して、データベースインスタンスを使用してModelFormをインスタンス化できます。

form  = MyModelForm(instance=MyModel.objects.get(pk=some_id))

ただし、これをテンプレートに渡してフィールドを編集して保存しようとすると、「some_id」を更新する代わりに新しいデータベースエントリを作成しますか?

編集1:これは私の見解です

def editData(request):
if request.method == 'POST':
    form = MyModelForm(request.POST, request.FILES)

    if form.is_valid():
        editedEntry = form.save() # <-- creates new entry, instead of updating
26
WesDec

POSTでインスタンス化するときは、instanceパラメーターを使用する必要があることに注意してください。

instance = MyModel.objects.get(whatever)
if request.method == "POST":
    form = MyModelForm(request.POST, instance=instance)
    ...

else:
    form = MyModelForm(instance=instance)
45
Daniel Roseman

可能でわずかに短い:

instance = MyModel.objects.get(whatever)
form = MyModelForm(request.POST or None, instance=instance)
...
2
Davy