在此模型中,我想更改在ImageField
中上传的文件的名称class Product(models.Model):
image = models.ImageField(upload_to=content_file_name)
name = models.CharField(max_length=100)
amount = models.PositiveIntegerField()
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
要更改我正在使用此功能的图像名称
def content_file_name(instance, filename):
ext = filename.split('.')[-1]
filename = '%s.%s' % (instance.id, ext)
return os.path.join('products', filename)
但是我的图片名称是None,如果我使用其他字段如'name',它就可以了。我该怎么做才能用id更改名称?谢谢!
答案 0 :(得分:3)
尚未创建实例的id
,因为在首次将新对象写入数据库之前,upload_to
函数被称为。
的重点在大多数情况下,此对象尚未保存到数据库中,因此如果它使用默认的AutoField,则可能还没有其主键字段的值。
两种选择:
使用uuid.uuid4()
值,它易于创建且与pk
一样独特。
另一个建议是,如果您关心搜索引擎和搜索引擎优化,请使用slugify(instance.name)
,以便在搜索引擎的图片搜索中更容易找到您的图片。