Django更新现有ImageField无效



我想让用户能够更新与记录相关联的图像。我有一个编辑表单,允许用户更新记录的各种元素,除图像字段外,所有元素都在正确更新。分配给记录时会显示图像字段,因此在创建记录时将图像添加到记录中效果良好。我看过类似的问答;As和他们没有帮助。

型号.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)

Forms.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)

Urls.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'),

模板-编辑.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>

{%endblock%}

编辑视图

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>

最新更新