python – Django – 在上传图片时使用instance.id.

我指的是这个
youtube video,了解如何使用ImageField上传图像.他已经解释了如何在保存图像时使用instance.id.我试了一下,但是instance.id正在返回None.而对他来说它完美无缺.以下是代码:

#models.py
import os

def get_image_path(instance, filename):
    return os.path.join(str(instance.id), filename)

class AdProfile(models.Model):
    name = models.CharField(max_length=100)
    profile_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)

每当保存文件时,其保存为None / filename.

即使这个link通知也是如此.我正在使用Django 10.5和MySQL数据库.

可能是什么问题?

最佳答案 Django管理员以某种方式调用了get_image_path函数而没有将模型保存到数据库,因此id为None.我们可以使用save方法覆盖django模型并确保保存图像并且get_image_path获取具有id的实例

class AdProfile(models.Model):
    name = models.CharField(max_length=100)
    profile_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)

    # Model Save override 
    def save(self, *args, **kwargs):
        if self.id is None:
            saved_image = self.profile_image
            self.profile_image = None
            super(AdProfile, self).save(*args, **kwargs)
            self.profile_image = saved_image
            if 'force_insert' in kwargs:
                kwargs.pop('force_insert')

        super(AdProfile, self).save(*args, **kwargs)
点赞