РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pydjPmCOEd 186 of 187 menu

Редактирование записи 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.

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить