Django:从服务器上的现有文件手动创建模型中的imagefield

Tim*_*ony 18 python django django-models django-filebrowser imagefield

这是在杀我!

我正在使用django-filebrowser,我想创建一个图库应用程序,利用它的上传功能来管理图像.

我有一个Gallery模型,允许用户在服务器上选择或创建目录,并将文件上传到该文件夹​​以显示在库中.我想自动搜索用户已将图像上传到的目录,然后选择该目录,然后自动为该文件夹中的每个图像创建图像实例.

class Gallery(model.Models):
    gallerydirectory = FileBrowserField(...)
    title = ...
    description ...

class Image(model.Models):
    image_field = models.ImageField()
Run Code Online (Sandbox Code Playgroud)

问题是FileBrowser表示图像与Django不同,但我想使用DJango ImageFields,因为我可以在模板端使用其他应用程序(sorl缩略图).

我有文件所需的所有数据,即文件名,路径等,我只是无法让Django创建一个ImageField的实例,而无需再次实际上传图像.我只是想填充它.

我在这里看到另一个提示如下的线程:

for image in filebrowser_image_objects_list:
    f = File(open('path-to-file-on-server','r'))
    i = Image()
    i.image_field('filename.png',f.read())
Run Code Online (Sandbox Code Playgroud)

但这给了我一个:

SuspiciousOperation error
Attempted access to '/filename.png' denied 
Run Code Online (Sandbox Code Playgroud)

这表明路径没有被正确读取.我打印了文件对象的属性,它正在打开正确的图像,它只是没有被传递到ImageField

帮助将非常感谢!

UPDATE

我已经放弃了尝试这项工作,因为它太乱了.我上面遇到的问题是我将ImageField的upload_field设置为'/'并且它没有被注意到意味着该文件被写入'/something.png'.

我已对其进行了修改,以便Image现在也使用FileBrowserField而不是ImageField.

Tim*_*ony 10

我将此标记为已回答,因为这是执行此操作的正确方法:

image_model.image_field('path', File().read())
Run Code Online (Sandbox Code Playgroud)

以编程方式将图像保存到Django ImageField


x-y*_*uri 5

我可能会遗漏一些东西,但这对我有用:

from a1.models import Model1                                                               
from django.core.files.images import ImageFile
m = Model1.objects.create()                                                                
m.f1 = ImageFile(open("1.png", "rb"))      
m.save()
Run Code Online (Sandbox Code Playgroud)

对于以下型号:

class Model1(models.Model):                 
    f1 = models.ImageField()
Run Code Online (Sandbox Code Playgroud)

这样它不起作用:

m.f1('1.png', File.read(open('1.png', 'r')))
Run Code Online (Sandbox Code Playgroud)

它说:

TypeError: 'ImageFieldFile' object is not callable
Run Code Online (Sandbox Code Playgroud)

检查Django 1.7,1.11.