Django - 你如何将InMemoryUploadedFile转换为ImageField的FieldFile?

Lou*_*ers 11 django upload image django-models

我一直在尝试,help(django.db.models.ImageField)dir(django.db.models.ImageField)寻找如何ImageField从上传的图像创建一个对象.

request.FILES有图像InMemoryUploadedFile,但我正在尝试保存包含一个的模型ImageField,所以如何将其InMemoryUploadedFile转换为ImageField

你怎么去寻找这种类型的东西?我怀疑这两个类有一个继承关系,但是我必须做很多事情dir()才能知道我是否要看.

小智 18

你需要将它保存InMemoryUploadedFileImageField而不是"转向"它ImageField:

image = request.FILES['img']
foo.imagefield.save(image.name, image)
Run Code Online (Sandbox Code Playgroud)

其中foo是模型实例,而imagefieldImageField.

或者,如果要从表单中提取图像:

image = form.cleaned_data.get('img')
foo.imagefield.save(image.name, image)
Run Code Online (Sandbox Code Playgroud)


use*_*955 3

你想在 ModelForm 中做到这一点吗?

这就是我对文件字段所做的事情

class UploadSongForm(forms.ModelForm):
    class Meta:
        model = Mp3File

    def save(self):
        content_type = self.cleaned_data['file'].content_type
        filename = gen_md5() + ".mp3"
        self.cleaned_data['file'] = SimpleUploadedFile(filename, self.cleaned_data['file'].read(), content_type)
        return super(UploadSongForm, self).save()
Run Code Online (Sandbox Code Playgroud)

您可以以此为例,在源代码中查看 InMemoryUploadedFile 类在初始化参数中需要什么。