django - Django 更新现有的 ImageField 不起作用
问题描述
我想让用户能够更新与记录关联的图像。我有一个编辑表单,允许用户更新记录的各种元素,除了图像字段之外,所有这些元素都正确更新。分配给记录时的图像字段正在显示,因此在创建记录时将图像添加到记录中可以正常工作。我已经查看了类似的问答,但它们没有帮助。
模型.py
class ComicInput(models.Model):
CoverPic = models.ImageField(upload_to='Comic_Pics', default='Comic_Pics/default.png',blank=True)
def __str__(self):
return '%s %s %s' % ( self.CoverPic)
def __unicode__(self):
return '%s %s %s' % ( self.CoverPic)
表格.py
class ComicInputForm(forms.ModelForm):
class Meta:
model = ComicInput
fields = '__all__'
视图.Py
def edit(request, id):
record = ComicInput.objects.get(pk = id)
return render(request, 'app/edit.html',{"ComicInput":record})
def update(request, id):
updaterecord = ComicInput.objects.get(pk = id)
if request.method == "POST":
form = editform(request.POST or None, request.FILES or None, instance=updaterecord)
if form.is_valid():
edit = form.save(commit=False)
edit.save()
return ComicInventory(request)
else :
form = editform(instance=updaterecord)
messages.error(request,"Error, please try again taking note of validation rules on the right")
return render(request, 'app/edit.html', {'form':form,"ComicInput":updaterecord})
def delete(request, id):
deleterecord = ComicInput.objects.get(pk = id)
deleterecord.delete()
return ComicInventory(request)
网址.py
path('edit/<int:id>', views.edit, name='edit'),
path('update/<int:id>', views.update, name='update'),
path('delete/<int:id>', views.delete, name='delete'),
模板 - edit.html
<!DOCTYPE html>
{% extends "app/layout.html" %}
{% block content %}
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Update Collection Record</title>
</head>
<body>
<h1>Update your Comic</h1>
<h4>Values for inputs that contain validation are noted on the right</h4>
{%if messages%}
{%for updaterecord in messages%}
<h3 style="color: green; float:">{{updaterecord}}</h3>
{%endfor%}
{%endif%}
<div class="container">
<form method="POST" action="/update/{{ComicInput.id}}" novalidate enctype="multipart/form-data">
{% csrf_token %}
<table class="table table-striped">
<thead class="thead-dark">
<tr>
<th scope="col">Input</th>
<th scope="col">Value</th>
</tr>
</thead>
<tr>
<td>ID</td>
<td><input type="text" name="id" value="{{ComicInput.id}}" readonly /></td>
<td>Read Only</td>
</tr>
<tr>
<td>CoverPic</td>
<td><input type="text" name="CoverPic" value="{{ComicInput.CoverPic}}" /></td>
<td>Must be a file path URL</td>
</tr>
</table>
<input type="submit" value="Update"/> | <a href="{% url 'ComicInventory' %}"> View Collection</a>
</form>
</div>
</body>
{% endblock %}
</html>
新的 HTML
<!DOCTYPE html>
{% extends "app/layout.html" %}
{% block content %}
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Update Collection Record</title>
</head>
<body>
<h1>Update your Comic</h1>
<h4>Values for inputs that contain validation are noted on the right</h4>
{%if messages%}
{%for updaterecord in messages%}
<h3 style="color: green; float:none">{{updaterecord}}</h3>
{%endfor%}
{%endif%}
<div class="container">
<form method="POST" action="/update/{{ComicInput.id}}" enctype="multipart/form-data">
{% csrf_token %}
<table class="table table-striped">
<thead class="thead-dark">
<tr>
<th scope="col">Field Name</th>
<th scope="col">Current Value</th>
<th scope="col">Edit Values</th>
</tr>
</thead>
<tr>
<td>ID</td>
<td><input type="text" name="id" value="{{ComicInput.id}}" readonly /></td>
<td>Read Only</td>
</tr>
<tr>
<td>Publisher</td>
<<td>"{{ComicInput.Publisher}}"</td>
<td>{{ form.Publisher}}</td>
</tr>
<tr>
<td>BackPic</td>
<td>{{form.BackPic}}</td>
<td> Current path: "{{ComicInput.BackPic}}" Must be a file path URL</td>
</tr>
<tr>
<td>CoverPic</td>
<td>{{ form.CoverPic}}</td>
<td> Current path: "{{ComicInput.CoverPic}}" Must be a file path URL</td>
</tr>
<tr>
<td>ContentPic</td>
<td>{{ form.ContentPic}}</td>
<td> Current path: "{{ComicInput.ContentPic}}" Must be a file path URL</td>
</table>
<input type="submit" value="Update"/> | <a href="{% url 'ComicInventory' %}"> View Collection</a>
</form>
</div>
{% 端块 %}
解决方案
编辑视图
def edit(request, id):
record = ComicInput.objects.get(pk = id)
form = editform(request.POST or None, request.FILES or None, instance=record)
return render(request, 'app/edit.html',{'form':form,"ComicInput":record})
**HTML**
<!DOCTYPE html>
{% extends "app/layout.html" %}
{% block content %}
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Update Collection Record</title>
</head>
<body>
<h1>Update your Comic</h1>
<h4>Values for inputs that contain validation are noted on the right</h4>
{%if messages%}
{%for updaterecord in messages%}
<h3 style="color: green; float:none">{{updaterecord}}</h3>
{%endfor%}
{%endif%}
<div class="container">
<form method="POST" action="/update/{{ComicInput.id}}" enctype="multipart/form-data">
{% csrf_token %}
<table class="table table-striped">
<thead class="thead-dark">
<tr>
<th scope="col">Field Name</th>
<th scope="col">Current Value</th>
<th scope="col">Edit Values</th>
</tr>
</thead>
{{form}}
</table>
</form>
</div>
推荐阅读
- python - 如何使用 ubuntu 18.04(仿生)构建 docker python 容器?
- python - Python:从数字 int 获取前 12 个月的列表
- openedge - 如何在多行上显示?
- powershell - powershell:在循环内调用时命令不起作用
- c++ - 如何使用资源文件编辑 Windows 应用程序 GUI?
- php - 在用户信息面板中看不到编辑的信息
- javascript - 如何以编程方式在我的 js 控制器中设置 jqx-grid 的总页数?
- c++ - Libcurl c++“未定义的引用”(Windows/MinGW/g++)
- sql - SQL如何返回具有最近日期和最高int值的记录
- selenium - Jenkins selenium docker 和应用程序文件