我正在使用django-extensions.AutoSlugField
和django.db.models.ImageField
。
要自定义上传的图像名称django.db.models.ImageField
,我做了什么:
from django.utils.text import slugify
# idea is to make image name the same as the automatically generated slug, however don't work
def update_image_name(instance, filename):
# this debug instance, and instance.slug is empty string
print(instance.__dict__)
# I attempt to use slugify directly and see that it's not the same as the output generated by AutoSlugField
# E.g. If I create display_name "shawn" 2nd time, AutoSlugField will return "shawn-2", but slugify(display_name) return "shawn"
print(slugify(instance.display_name))
return f"images/{instance.slug}.jpg"
class Object(models.Model):
...
display_name = models.TextField()
...
# to customize uploaded image name
image = models.ImageField(blank=True, upload_to=update_image_name)
...
# create slug automatically from display_name
slug = AutoSlugField(blank=True, populate_from=["display_name"]
根据我调试的内容,当我调用instance
inside时update_image_name
,slug
是空字符串。
如果我理解正确slug
仅在事件保存时创建,所以当我调用ImageField
实例时,slug
尚未创建,因此为空字符串。
我认为这可能与事件后保存有关。但是,我不确定这是否是真正的原因或如何做到这一点。
如何获取自动生成的 slug 作为我的自定义图像名称?