在使用ImageField上传图片时,保存的路径一般通过upload_to指定,例如upload_to=‘user/image’,上传一张图片名为:my.jpg,则保存的路径为user/image/my.jpg,但是有些时候,我们需要自定文件的保存路径和文件名,则可以通过以下的方法去实现:
def user_avatar_path(instance, filename):
"""自定义用户头像保存路径和文件名"""
# 获取源文件名的后缀
ext = filename.split('.')[-1]
# 通过当前时间字符串作为文件名
file_name = datetime.now().strftime("%Y%m%d_%H%M%S")
# 拼接文件名和后缀
file = file_name + '.' + ext
# 使用当前用户id为路径
return 'user/portrait/{id}/{file}'.format(id=instance.id, file=file)
class User(AbstractUser):
"""
用户表
"""
# 将upload_to的值设置为user_avatar_path即可
user_avatar = models.ImageField(upload_to=user_avatar_path, default='user/default.png', max_length=300,
verbose_name='用户头像', blank=True)