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()
Вернуться на верх