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:
Only redirect if the form is valid.
Also use
request.FILESwhile editing.Use
get_object_or_404()instead ofget().
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
PascalCaseso it is better to name it asBuginstead ofbug.
Make separate template for editing, say edit.html so:
<body>
<form method='POST'>
{% crsf_token %}
{{form.as_p}}
<input type='submit'>
</form>
</body>