Record not getting edited in django form using instance

The model is not getting updated in the database while using the below methods.

This is upload form in views

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})

This is my edit function in views

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})

Tried editing the record but it is not getting updated.

Also you can try this way:

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})

And in templates:

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)

I have following suggestions:

  1. Only redirect if the form is valid.

  2. Also use request.FILES while editing.

  3. Use get_object_or_404() instead of get().

So, upload view should be:

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})

Edit view should be:

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})

Note: Models are written in PascalCase so it is better to name it as Bug instead of bug.

Make separate template for editing, say edit.html so:

<body>
    <form method='POST'>
        {% crsf_token %}
        {{form.as_p}}
        <input type='submit'>
    </form>
</body>
Back to Top