无法将 InMemoryUploadedFile 保存到 Django 中的模型

Unable to save InMemoryUploadedFile to model in Django

我有以下型号:

class IdentifierImage(models.Model):
    super = models.ForeignKey(Super)
    identifier = models.CharField(null=False, blank=False, max_length=32, db_index=True)
    image = models.ImageField(upload_to='/identifierimages/%Y/%m/', blank=True, null=True, )

    class Meta:
        unique_together = (
            ('survey', 'identifier'),
        )

我还有一个上传图片文件的表单(不是 ModelForm,以后也不会),我得到的是 InMemoryUploadedFile。从 Super class 我创建了 IdentifierImage 对象并尝试将其保存为:

def save_identifier_image(identifier, image):
    identifier_image, created = self.identifierimage_set.update_or_create(identifier=identifier)
    <logics to remove old images, disabled for current tests>
    identifier_image.image.save(image.name, image)

,其中 identifier 是有效字符串,imageInMemoryUploadedFile.

但是将 InMemoryUploadedFile 保存到模型失败并显示 SuspiciousFileOperation,并显示:连接路径 (C:/</identifierimages/%Y/%m/>) 位于基本路径组件之外 ( <MEDIA_ROOT>).

为什么会这样?

为什么它尝试保存在 C:/ 而不是媒体根目录下?还是发生了完全不同的事情?

您可能想尝试在 ImageField 的 upload_to 路径中不使用前导斜杠:

>>> os.path.join("/whatever", "/else")
'/else'