Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:从服务器上的现有文件在模型中手动创建imagefield_Python_Django_Django Models_Imagefield_Django Filebrowser - Fatal编程技术网

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

Python Django:从服务器上的现有文件在模型中手动创建imagefield,python,django,django-models,imagefield,django-filebrowser,Python,Django,Django Models,Imagefield,Django Filebrowser,这简直要了我的命 我正在使用django filebrowser,我想创建一个gallery应用程序,利用它的上载功能来管理图像 我有一个图库模型,允许用户在服务器上选择或创建目录,并将文件上载到该文件夹以显示在图库中。我想自动搜索用户上传图像到并选择的目录,然后为文件夹中的每个图像自动创建图像实例 class Gallery(model.Models): gallerydirectory = FileBrowserField(...) title = ... descr

这简直要了我的命

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

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

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

class Image(model.Models):
    image_field = models.ImageField()
问题是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())
但这给了我一个:

SuspiciousOperation error
Attempted access to '/filename.png' denied 
这表明路径没有被正确读取。我已经打印了文件对象的属性,它正在打开正确的图像,只是没有传递到ImageField

非常感谢您的帮助

更新

我已经放弃了争取这份工作,因为它太乱了。我在上面遇到的问题是,我已经将ImageField的upload_字段设置为“/”,并且没有注意到它,这意味着文件正在写入“/something.png”


我对其进行了修改,使图像现在也使用FileBrowserField,而不是ImageField

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

from django.core.files import File

image_model.image_field('path', File().read())

我可能遗漏了什么,但这对我来说很有效:

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()
对于以下型号:

class Model1(models.Model):                 
    f1 = models.ImageField()
这样它就不起作用了:

m.f1('1.png', File.read(open('1.png', 'r')))
它说:

TypeError: 'ImageFieldFile' object is not callable

使用Django 1.7和1.11进行检查。

这对我使用Django 2的Python3非常有效

from urllib.request import urlopen
from urllib.parse import urlparse
from io import BytesIO
from django.core.files.images import ImageFile


from .models import ModelWithImageField

# Solving for SSL Error
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

url = https://www.someurl.com/image.png?other_params_if_they_exist
image_file_name = urlparse(url).path.split('/')[-1]
image_file_content = BytesIO(urlopen(url).read())
ModelWithImageField().image_field.save(image_file_name, image_file_content)