Запись не редактируется в форме django при использовании экземпляра

При использовании следующих методов модель не обновляется в базе данных.

Это форма загрузки в представлениях

def upload(request):
if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if form.is_valid():
        upload = form.save(commit= False)
        upload.user = request.user
        upload.save()
        messages.info(request,"Added Successfully..!")
    return redirect("home")
return render(request, "upload.html", {'form': UploadForm})

Это моя функция редактирования в представлениях

def editbug(request, pk):
edit = bug.objects.get(id=pk)

if request.method == 'POST':
    form = UploadForm(request.POST, instance= edit)
    if form.is_valid():
        form.save()
        print("uploaded")
    messages.info('Record updated successfully..!')
    return redirect("home")
else:
    form = UploadForm(instance= edit)


return render(request, "upload.html", {'form': form})

Попробовал отредактировать запись, но она не обновляется.

Также вы можете попробовать следующий способ:

views.py:

def update(request, id):  
    edit = bug.objects.get(id=id)  
    form = Formname(request.POST,instance=edit)  
    if form.is_valid():  
       form.save()  
       return HttpResponseRedirect('/')  
    return render(request,'edit.html',{'edit': edit})

А в шаблонах:

edit.html:

<form method='post' action=/update/{{edit.id}}>
   {% csrf_token %}
  <input value={{edit.fieldname}}/>
  <input type="submit"/>
</form>

urls.py:

path('update/<int:id>/',views.update)

У меня есть следующие предложения:

  1. Перенаправлять только если форма действительна.

  2. Также используйте request.FILES при редактировании.

  3. Используйте get_object_or_404() вместо get().

Итак, вид загрузки должен быть следующим:

def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            upload = form.save(commit= False)
            upload.user = request.user
            upload.save()
            messages.info(request,"Added Successfully..!")
            return redirect("home") #Only redirect if the form is valid.
    else:
        form=UploadForm()
    return render(request, "upload.html", {'form': form})

Вид редактирования должен быть:

def editbug(request, pk):
    edit = get_object_or_404(bug, id=pk)

    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES, instance= edit)
        if form.is_valid():
            form.save()
            print("uploaded")
            messages.info('Record updated successfully..!')
            return redirect("home")
    else:
        form = UploadForm(instance=edit)

    return render(request, "edit.html", {'form': form})

Примечание: Модели записываются в формате PascalCase, поэтому лучше называть их Bug, а не bug.

Сделайте отдельный шаблон для редактирования, скажем edit.html так:

<body>
    <form method='POST'>
        {% crsf_token %}
        {{form.as_p}}
        <input type='submit'>
    </form>
</body>
Вернуться на верх