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

时间:2015-10-16 15:10:50

标签: python django django-models django-forms

我有以下型号:

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是有效字符串,imageInMemoryUploadedFile

但是InMemoryUploadedFile模型的保存失败了SuspiciousFileOperation,并告诉我:加入的路径(C:/ </identifierimages/%Y/%m/>)位于基本路径组件之外({{ 1}})。

为什么会这样?

为什么它会尝试在<MEDIA_ROOT>下而不是在媒体根目录下保存?或者是完全不同的事情?

1 个答案:

答案 0 :(得分:2)

您可能想尝试在ImageField的upload_to路径中没有前导斜杠:

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