添加自定义文件名django-model(models.FileField)



我有一个用户模型和另一个音乐风格模型。在我的音乐风格模型中,我需要将图像放在原始名称之外的名称下。

我想要的新名称是"正在保存'+'_'+'毫秒的用户的电子邮件"。

保持此格式:'test@gmail.com_1621196336'

  • 模型用户:
class CustomUser(AbstractUser):
username = None
id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False, null=False)
email = models.EmailField('E-mail', unique=True, null=False)
  • 模特音乐风格:
class MusicStyle(models.Model):
id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False, null=False)
name = models.CharField(max_length=150, null=False, blank=False)
image_link = models.FileField(upload_to='musics/thumbnail_images/##CUSTOM_NAME##')

音乐风格与用户模式不同

如何做到这一点?

我不明白带毫秒的字段是什么,也不知道应该做什么,所以我用电子邮件和music_stylename替换了它,下面是如何命名图像,你可以根据需要调整

def upload_location(instance, filename):
filebase, extension = filename.split('.')
return 'musics/thumbnail_images/%s_%s.%s' % (instance.user.email,instance.name, extension)

class MusicStyle(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
name = models.CharField(max_length=150, null=False, blank=False)
image_link = models.FileField(upload_to=upload_location)

如果你想为你的文件设置自定义文件名,你可以这样做:

def image_upload_to(instance, filename):
# You can access to your model fields with instance for example: instance.name
return f"musics/thumbnail_images/{filename}"
class MusicStyle(models.Model):
id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False, null=False)
name = models.CharField(max_length=150, null=False, blank=False)
image_link = models.FileField(upload_to=image_upload_to)

相关内容

  • 没有找到相关文章

最新更新