【问题标题】:Add custom filename django model (models.FileField)添加自定义文件名django模型(models.FileField)
【发布时间】:2021-08-06 05:16:01
【问题描述】:

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

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

保持这种格式: '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##')

音乐风格与用户模式不同。

如何做到这一点?

【问题讨论】:

    标签: python django django-models model-view-controller model


    【解决方案1】:

    我不明白毫秒字段是什么或应该做什么,所以我用电子邮件和音乐样式名称替换它,这是你如何命名你的图像,你可以根据需要调整它

    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)
    

    【讨论】:

      【解决方案2】:

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

      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)
      

      【讨论】:

      • 您应该将用户的外键添加到您的 MusicStyle 模型中,您可以在 image_upload_to 函数中使用它,例如 instance.user.email
      猜你喜欢
      • 2011-11-14
      • 2011-04-24
      • 2013-09-09
      • 2023-03-21
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多