Django 更新现有 ImageField 不起作用

问题描述

我想让用户能够更新与记录关联的图像。 我有一个编辑表单,允许用户更新记录的各种元素,除了图像字段之外,所有这些元素都在正确更新。 分配给记录的图像字段正在显示,因此在创建记录时将图像添加到记录中可以正常工作。 我看过类似的问答,但没有帮助。

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,{'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>

{% 结束块 %}

解决方法

编辑视图

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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...