我在使用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 %}
更明确的问题示例:
正确填写表格:
我单击“ Crear” /“创建”按钮,然后发生以下情况:
它告诉我该字段是必填字段,并且出现在“我不选择文件”输入中,这是怎么回事?
答案 0 :(得分:1)
Django模型的字段默认为null=False
,blank=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">
记住要重新运行迁移。