首页 > 解决方案 > 在我的表格中有一个图片上传部分。如果用户没有上传任何文件,那么它会给出 MultiValueDictKeyError。如何摆脱它?

问题描述

我正在开发一个基于 Django Web 的应用程序的项目。在这个项目中,有一个部分我通过 HTML 表单从用户那里获取信息。我添加了一个“图像上传”部分,但是当用户不上传任何文件时,它会给出 MultiValueDictKeyError 错误。我试过这个但不适合我

这是错误部分:错误图像

这是我的 addpost.html 部分。它由一个表格组成,我通过它获取信息。

<form action="{% url 'addpost' %}" method='POST' enctype="multipart/form-data" novalidate>
            {% include 'includes/messages.html' %}
            {% csrf_token %}
            {% if user.is_authenticated %}
            <input type="hidden" name="user_id" value="{{user.id}}">
            {% else %}
            <input type="hidden" name="user_id" value="0">
            {% endif %}
            <div class="row ">
                <div class="tex-center">
                    <div class="row">
                        <div class="col-md-6 text-left">
                            <div class="form-group name">
                                <input type="text" name="author" class="form-control" placeholder="Author"
                                    {% if user.is_authenticated %} value="{{user.first_name}}" {% endif %} readonly>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group name">
                                <input type="text" name="title" class="form-control" placeholder="title" required>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group name">
                                <input type="text" name="location" class="form-control" placeholder="location" required>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group name">
                                <input type="text" name="short_desc" class="form-control"
                                    placeholder="Write short description" required>
                            </div>
                        </div>
                        <div class="col-md-12">
                            <div class="form-group message">
                                <textarea class="form-control" name="full_desc"
                                    placeholder="Write full description"></textarea>
                            </div>
                        </div>
                        <input type="file" id="myFile" name="place_photo" required/>
                        <div class="col-md-12">
                            <div class="send-btn text-center">
                                <input type="submit" class="btn btn-outline-success mr-1" value="Send Post">
                                <a href="{% url 'dashboard' %}" class="btn btn-outline-danger">Cancel</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </form>

这是我接收 POST 数据的 views.py 文件

def add_post(request):
    if request.method == "POST":
        try:
            is_private = request.POST['is_private']
        except MultiValueDictKeyError:
            is_private = False
        author = request.POST['author']
        title = request.POST['title']
        user_id = request.POST.get('user_id')
        location = request.POST['location']
        short_desc = request.POST['short_desc']
        full_desc = request.POST['full_desc']
        place_photo = request.FILES['place_photo']
        post = Post(author=author, user_id=user_id, title=title, location=location,
        short_desc=short_desc,full_desc=full_desc, place_photo=place_photo)
        post.save()
        messages.success(request,"Your post uploaded successfully")
    return render(request,'community/addpost.html')

这是我的 models.py 文件

class Post(models.Model):
 author = models.CharField(max_length=100, default=' ')
 title = models.CharField(max_length=150)
 user_id = models.IntegerField(blank=True)
 location = models.CharField(max_length=100, default=' ')
 short_desc = models.CharField(max_length=255, default='In less than 250 words')
 full_desc = models.TextField()
 place_photo = models.ImageField(upload_to='photos/%Y/%m/%d/')
 added_date = models.DateTimeField(default=datetime.now,blank=True)

标签: htmldjangodjango-modelsdjango-viewsdjango-templates

解决方案


推荐阅读