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>