Django Model Form不能正确显示Image字段,也不会发布它

时间:2017-12-09 14:37:37

标签: django modelform

由于按钮位于字段内,因此表单中图片的“文件上载”外观不正常。虽然它在上传的形式中显示,但它不会发布。当我查看firebug时,我可以看到File图像的字段没有通过其他名称字段发送,因此表单永远不会验证。

以下是它的外观

enter image description here

以下是模型中的定义。

picture = models.ImageField(upload_to=user_directory_path)

因此,当Django创建表单时,它会以奇怪的方式为文件提交

我应该如何在模型中定义文件字段?或错误在哪里?

表格有此指示>

{% load widget_tweaks %}
<form method="post" action="{% url 'book_create' %}" class="js-book-create-form" enctype="multipart/form-data">

  {% csrf_token %}

  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
    <h4 class="modal-title">Create a new book</h4>
  </div>
  <div class="modal-body">
    {% for field in form %}
      <div class="form-group{% if field.errors %} has-error{% endif %}">
        <label for="{{ field.id_for_label }}">{{ field.label }}</label>
        {% render_field field class="form-control" %}
        {% for error in field.errors %}
          <p class="help-block">{{ error }}</p>
        {% endfor %}
      </div>
    {% endfor %}
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="submit" class="btn btn-primary">Create book</button>
  </div>
</form>

表格的处理方式如下:

data = dict()

    if request.method == 'POST':
        form = NewStockOfBookssForm(request.POST, request.FILES)
        if form.is_valid():

            form.save()
            data['form_is_valid'] = True
        else:
            data['form_is_valid'] = False

3 个答案:

答案 0 :(得分:0)

您是否为表单标记设置了enctype="multipart/form-data"?对于具有上传/图像输入的字段,这是必需的,如文档中所述。

你是如何管理表格的?如果你使用FormView(或派生的)CBV,这是为你完成的,但如果没有,你需要明确地将files=(request.FILES or None)传递给表单的构造函数。

答案 1 :(得分:0)

你可以保存链接,这种方式我认为更好:

1 :在您保存在数据库中的图片字段中。(太重)但是在链接方式中你太轻了。

2 :在链接方式中你可以用静态文件方式设置它。(可以删除简单)。(图像域有很多问题但链接也很容易管理)< / p>

我希望它能帮助你选择。

答案 2 :(得分:0)

  

表格中图片的文件上传外观不正常   按钮在场内。

至于这个问题,我找到的解决方案是在按钮上添加一个自定义css类,然后根据需要进行调整。整个字段跨度充当按钮,但看起来并不糟糕。