Python Django选择在型号';s保存方法

Python Django选择在型号';s保存方法,python,django,django-models,Python,Django,Django Models,下面是我对带有字段image=models.ImageField的模型的保存方法(上传到='products/%Y/%m/%d',blank=True): 它工作正常,压缩所有图像,但每次在django admin中单击save时都会更改图像的目录。它使所有图像的路径类似: 编辑和保存前:products/2020/11/05/img.jpeg 之后:products/2020/11/05/products/2020/11/05/img.jpeg 再次单击保存:products/2020/11/

下面是我对带有字段
image=models.ImageField的模型的保存方法(上传到='products/%Y/%m/%d',blank=True)

它工作正常,压缩所有图像,但每次在django admin中单击save时都会更改图像的目录。它使所有图像的路径类似:
编辑和保存前:
products/2020/11/05/img.jpeg

之后:
products/2020/11/05/products/2020/11/05/img.jpeg

再次单击保存:
products/2020/11/05/products/2020/11/05/products/2020/11/05/img.jpeg

然后我得到这个错误:

SuspiciousFileOperation at /admin/shop/product/6/change/
Storage can not find an available filename for "products\2020\11\05\products\2020\11\05\products\2020\...... .jpeg".
Please make sure that the corresponding file field allows sufficient "max_length".
我如何解决这个问题?我想我需要选择保存图像的存储位置。Django不允许我在
upload\u to
字段中使用绝对路径,所以我不知道

压缩函数是:

from io import BytesIO
from PIL import Image
from django.core.files import File

def compress(image):
    im = Image.open(image)
    if im.mode != 'RGB':
        im = im.convert('RGB')
    im_io = BytesIO()
    im.save(im_io, 'JPEG', quality=70)
    compressed_image = File(im_io, name=image.name)
    return compressed_image

问题是文件名每次都会更新。在每个步骤中,您都应该确保文件名只是一个文件名。大概是这样的:

导入操作系统
如果自我形象:
self.image=压缩(self.image)
self.image.name=os.path.basename(self.image.name)

我不知道你的压缩功能到底是什么,但也许你也可以检查一下它是否对文件名做了一些奇怪的事情。

你的模型有4个
图像字段(上传到class='products/%Y/%m/%d',blank=True)
?@cizario是的,第二个图像,第三个和第四个尝试将
null=True,
添加到每个
图像字段(…)
并重新运行迁移命令,然后让see@cizario没有帮助,仍然创建递归目录
from io import BytesIO
from PIL import Image
from django.core.files import File

def compress(image):
    im = Image.open(image)
    if im.mode != 'RGB':
        im = im.convert('RGB')
    im_io = BytesIO()
    im.save(im_io, 'JPEG', quality=70)
    compressed_image = File(im_io, name=image.name)
    return compressed_image