Запись не редактируется в форме 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)
У меня есть следующие предложения:
Перенаправлять только если форма действительна.
Также используйте
request.FILES
при редактировании.Используйте
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>