我有以下型号:
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
类中,我创建了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/>
)位于基本路径组件之外({{ 1}})。
为什么会这样?
为什么它会尝试在<MEDIA_ROOT>
下而不是在媒体根目录下保存?或者是完全不同的事情?
答案 0 :(得分:2)
您可能想尝试在ImageField的upload_to
路径中没有前导斜杠:
>>> os.path.join("/whatever", "/else")
'/else'