在 Django ImageField 中使用 id 更改上传文件名
Changing file name on upload using id in Django ImageField
在这个模型中,我想更改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改名字怎么办?谢谢!
实例的 id
尚未创建,因为 在 新对象首次写入数据库之前调用了 upload_to
函数。
In most cases, this object will not have been saved to the database yet, so if it uses the default AutoField, it might not yet have a value for its primary key field.
来自 Django docs
的强调
两种选择:
使用 uuid.uuid4()
值,它易于创建并且与 pk
一样独特。
另外一个建议,如果你关心搜索引擎和SEO,使用slugify(instance.name)
这样你的图片在搜索引擎的图片搜索中更容易被找到。
在这个模型中,我想更改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改名字怎么办?谢谢!
实例的 id
尚未创建,因为 在 新对象首次写入数据库之前调用了 upload_to
函数。
In most cases, this object will not have been saved to the database yet, so if it uses the default AutoField, it might not yet have a value for its primary key field.
来自 Django docs
的强调两种选择:
使用 uuid.uuid4()
值,它易于创建并且与 pk
一样独特。
另外一个建议,如果你关心搜索引擎和SEO,使用slugify(instance.name)
这样你的图片在搜索引擎的图片搜索中更容易被找到。