Django ImageField和BinaryField如何为图像工作

时间:2018-01-02 01:30:47

标签: django image django-rest-framework

所以我想问这两个字段是如何工作的。 正如我的朋友告诉我他的ios会向我发送字节格式图像,如果我使用imageField而不是BinaryField,这有关系吗?

我确实尝试将二进制字段添加到我的用户模型中,但是当在django admin和django rest framework api上测试它时,它会工作

在django admin中:二进制字段没有出现在其中

在django rest框架中:得到一个错误,表示二进制字段的editable为false。设置binaryfield editable = True也不起作用。

关于django中Binaryfield的文档也不多。

任何人都可以向我解释这两个领域是如何运作的?发送字节格式到图像域工作?

2 个答案:

答案 0 :(得分:1)

ImageFieldFileField是您应该用来保存图片的内容。这两个字段都只是将file_path(例如:/static/user_images/smith.jpg)保存到服务器上存储的物理映像中。 有关详细信息,请阅读此FileFieldImageField

BinaryField不用于保存图片。 For more detail

注意:您从未将物理文件存储到数据库。那就是你不能使用BinaryField作为图像。

答案 1 :(得分:0)

ImageField负责图片。否则,ImageField和FileField相同。两者都存储到物理卷文件的路径。 而且两者都不符合要求。 数据库需要BinaryField:

models.BinaryField (blank = true, null = true, editable = true)

到目前为止,一切都很好。如果editable = True,则该字段应显示在管理界面中。但是要查看图片,必须在之前再次进行变换

encoded = b64encode (model.image) .decode ('ascii')

,例如倒入表格。

render_to_string ('lib / forms / imageform.html', {"image": encoded}, request).

在我的情况下,表单元素看起来像这样:

<form id = "{{form.fid}}" class = "form-horizontal data-form" enctype = "multipart / form-data" method = "post">
     <img src = "data: image / png; base64, {{image}}">
</ Form>