Редактирование записи CRUD в Django
Update - изменить существующую запись. Обычно это отдельная страница с формой. Важно понять два момента: как поля формы изначально получают данные из базы и что происходит после нажатия кнопки.
Как данные появляются в форме
Сначала по id из URL находят
работника. Затем создают форму
и передают объект в параметр
instance. Django подставит
текущие значения в поля:
employee = get_object_or_404(Employee, id=id)
form = EmployeeForm(instance=employee)
Без instance форма была бы
пустой, как при создании. С
instance пользователь видит
уже заполненные имя, возраст и т.д.
и может их поправить.
Что после кнопки
После отправки приходит POST.
Форму снова создают из
request.POST, но instance
оставляют тем же объектом. Тогда
save() не создаст новую
запись, а обновит старую:
form = EmployeeForm(request.POST, instance=employee)
if form.is_valid():
form.save()
return redirect('/employees/')
Схема целиком (заготовка):
def employee_edit(request, id):
employee = get_object_or_404(Employee, id=id)
if request.method == 'POST':
form = EmployeeForm(request.POST, instance=employee)
if form.is_valid():
form.save()
return redirect('/employees/')
else:
form = EmployeeForm(instance=employee)
return render(request, 'employees/edit.html', {
'form': form,
})
В таблице списка - ссылка на
редактирование с id работника.
Сделайте маршрут редактирования
с параметром id.
При GET покажите форму,
заполненную данными работника
через instance.
При POST обновите запись и сделайте редирект на список.
В таблице добавьте ссылку на редактирование каждого работника.
Расскажите своими словами:
зачем instance при показе
формы и зачем он же при POST.