Django : Обновление базы данных sqlite из html-шаблона
У меня есть таблица базы данных с именем FormDB.
Я написал программу для работы с CURD. Для каждой строки данных базы данных есть две кнопки 'EDIT' и 'DELETE'.
Кнопка редактирования работает, когда я указываю <form action = "" method = "POST">
в шаблоне HTML. Но когда я перенаправляюсь на страницу, где отображаются все данные БД, она создает новую строку данных вместо того, чтобы обновить существующее значение.
view.py
def EditData(request, id):
a = FormDB.objects.get(id=id)
nameupdate = a.name
form = DjangoForm(request.POST)
if request.method == "POST" and form.is_valid():
newname = form.cleaned_data['name']
b = FormDB.objects.get(id=id)
b.name = newname
b.save()
return render(request, "editform.html", {'nameupdate' : nameupdate})
def ViewDBData(request):
editeddb = list(FormDB.objects.all().values())
return HttpResponseRedirect('/viewdb/')
editform.html
<body>
<h1>EDIT PAGE</h1>
<form action = "/viewdb/" method = "POST">
{% csrf_token %}
{% if nameupdate %}
<label>Enter new name: </label>
<input type="text" name = "name" placeholder = {{ nameupdate }} REQUIRED>
<input type="submit" value = "Submit Changes" ><br>
{% endif %}
</form>
urls.py
urlpatterns = [
...........
..........
path('viewdb/', ViewDBData),
]
Итак, когда я нажимаю на кнопку Submit Changes, она должна перенаправлять на страницу, где все dbdata отображаются с обновленными значениями.
Я не вижу, как этот код может создать новую строку, но то, что вы делаете, не просто редирект. Вы отправляете данные формы в конечную точку, которая не имеет информации об идентификаторе. Вы должны отправлять данные формы в конечную точку, как editdata/{id}
(я полагаю, это то, что вы делаете здесь <form action = "" method = "POST">
). И сделать редирект внутри EditData.
Также, если ваша DjangoForm является ModelForm, то для сохранения изменений вы можете сделать следующее
form = DjangoForm(request.POST, instance=FormDB.objects.get(id=id))
form.save()