在这个模型中,我想更改 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
Run Code Online (Sandbox Code Playgroud)
要更改图像的名称,我正在使用此功能
def content_file_name(instance, filename):
ext = filename.split('.')[-1]
filename = '%s.%s' % (instance.id, ext)
return os.path.join('products', filename)
Run Code Online (Sandbox Code Playgroud)
但是我的图像的名称是无,如果我使用其他字段,如“名称”,则它有效。我应该怎么做才能更改带有 id 的名称?谢谢!
实例id尚未创建,因为该upload_to函数在新对象首次写入数据库之前被调用。
在大多数情况下,这个对象还没有被保存到数据库中,所以如果它使用默认的 AutoField,它的主键字段可能还没有值。
来自Django 文档的强调
两种选择:
使用一个uuid.uuid4()值,它很容易创建并且与pk.
另一个建议,如果您关心搜索引擎和 SEO,请使用 aslugify(instance.name)以便在搜索引擎的图像搜索中更容易找到您的图像。
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |