添加自定义文件名 django 模型 (models.FileField)

Add custom filename django model (models.FileField)

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

我想要的新名称是 'email of the user who is saving' + '_' + 'milliseconds'.

保持这种格式: '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_style 名称替换了它,这里是你如何命名你的图像,你可以根据你的需要进行调整想要

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)