Django: использование ModelForm для редактирования существующей записи в базе данных - PullRequest
25 голосов
/ 08 сентября 2011

Я создал класс ModelForm, чтобы иметь возможность создавать и редактировать записи базы данных. Создание новых записей работает хорошо, однако я не знаю, как использовать ModelForms для редактирования / обновления существующей записи. Я могу создать экземпляр ModelForm с экземпляром базы данных, используя:

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

Однако, когда я передаю это шаблону, редактирую поле и затем пытаюсь сохранить его, я создаю новую запись в базе данных вместо обновления "some_id"?

Edit1: Это мой взгляд

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

Ответы [ 2 ]

45 голосов
/ 08 сентября 2011

Помните, что вам все равно нужно использовать параметр instance при создании экземпляра на POST.

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

else:
    form = MyModelForm(instance=instance)
1 голос
/ 04 ноября 2016

Также возможно и немного короче:

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