Django中的“输入文件”错误。无法识别文件

时间:2019-08-08 05:47:37

标签: python django python-3.x

我在使用django图像时遇到问题,在django管理器中选择一个图像时,一切正常,但是在创建自己的表单时,它不起作用。

也就是说,正确填写整个表单,在提交表单时正常选择文件,不会发送该文件并取消选择您选择的文件,并告诉我该字段为必填字段。这没有任何意义,我选择图像,发送表单并告诉我该字段为必填字段,并且我选择的图像被取消选择。

这是我的模特:

class Course(models.Model):
    instructor = models.ForeignKey(User, on_delete = models.CASCADE)
    title = models.CharField(max_length = 200)
    image = models.ImageField(upload_to = 'course')
    description = models.TextField()
    users = models.ManyToManyField(User, related_name = 'get_users')
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['title', 'created']

这是我的观点:

class CourseCreateView(CreateView):
    model = Course
    fields = '__all__'
    template_name = 'courses/course_form.html'
    success_url = reverse_lazy('home')

模板:

{% extends 'core/base.html' %}
{% block content %}
    <main>
        <div class="container">
            <div class="row">
                <div class="col">
                    <form action="" method="POST"> {% csrf_token %}
                        {{ form.as_p }}
                        <button class="btn btn-primary btn-block">Crear</button>
                    </form>
                </div>
            </div>
        </div>
    </main>
{% endblock %}

更明确的问题示例:

正确填写表格:

enter image description here

我单击“ Crear” /“创建”按钮,然后发生以下情况:

enter image description here

它告诉我该字段是必填字段,并且出现在“我不选择文件”输入中,这是怎么回事?

1 个答案:

答案 0 :(得分:1)

Django模型的字段默认为null=Falseblank=False

所以您需要:

 image = models.ImageField(upload_to = 'course', null=True, blank=True)

blank=True允许表单输入为空。

null=True在数据库上设置NULL,基本上意味着在插入时允许空值。

您似乎还没有在表单中定义编码类型。

如果未指定enctype属性,则

application/x-www-form-urlencoded是默认值。

如果要求您的用户通过表单上载文件,则

multipart/form-data是必需的。

在模板中包含enctype

<form method="post" action="your action" enctype="multipart/form-data">

记住要重新运行迁移。