无法将 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
是有效字符串,image
是 InMemoryUploadedFile
.
但是将 InMemoryUploadedFile
保存到模型失败并显示 SuspiciousFileOperation
,并显示:连接路径 (C:/</identifierimages/%Y/%m/>
) 位于基本路径组件之外 ( <MEDIA_ROOT>
).
为什么会这样?
为什么它尝试保存在 C:/
而不是媒体根目录下?还是发生了完全不同的事情?
您可能想尝试在 ImageField 的 upload_to
路径中不使用前导斜杠:
>>> os.path.join("/whatever", "/else")
'/else'
我有以下型号:
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
是有效字符串,image
是 InMemoryUploadedFile
.
但是将 InMemoryUploadedFile
保存到模型失败并显示 SuspiciousFileOperation
,并显示:连接路径 (C:/</identifierimages/%Y/%m/>
) 位于基本路径组件之外 ( <MEDIA_ROOT>
).
为什么会这样?
为什么它尝试保存在 C:/
而不是媒体根目录下?还是发生了完全不同的事情?
您可能想尝试在 ImageField 的 upload_to
路径中不使用前导斜杠:
>>> os.path.join("/whatever", "/else")
'/else'