Django 更新现有的 ImageField 不工作
Django Update Existing ImageField not working
我想让用户能够更新与记录关联的图像。
我有一个编辑表单,允许用户更新记录的各种元素,除了图像字段外,所有元素都正确更新。
分配给记录的图像字段正在显示,因此在创建记录时将图像添加到记录工作正常。
我查看了类似的问答,但没有帮助。
Models.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__'
Views.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'),
模板 - 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>
{% 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>
我想让用户能够更新与记录关联的图像。 我有一个编辑表单,允许用户更新记录的各种元素,除了图像字段外,所有元素都正确更新。 分配给记录的图像字段正在显示,因此在创建记录时将图像添加到记录工作正常。 我查看了类似的问答,但没有帮助。
Models.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__'
Views.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'),
模板 - 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>
{% 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>