如何重命名通过Django Rest Framework上传的图像

问题描述

我在重命名上传的图像时遇到问题。我希望我上传的图像使用名称 &-btns { position: absolute; top: 0; height: 100%; width: 100%; z-index: 1; display: grid; grid-template-columns: repeat(2,1fr); align-items: center; text-align: center; } ,而不是使用原始名称。如果我直接从django上传图片,则没有问题,但是我无法弄清楚如果通过Django Rest Framework上传图片该怎么做。

这是我的 model.py

model['name'].jpg

这是我的 serializer.py

class Shop(models.Model):
    date = datetime.datetime.Now()
    year_Now = int(date.strftime('%Y'))

    user = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=20,unique=True)
    slug = models.SlugField(default='')
    logo = models.ImageField(upload_to=rename_and_path)
    industry = models.CharField(max_length= 20,choices=industry_choice)
    business_start = IntegerBoundedField(min_value=1950,max_value=year_Now)
    franchise_start = IntegerBoundedField(min_value=1950,max_value=year_Now)
    headquarter = models.CharField(max_length=100)
    units = models.IntegerField()
    description = models.TextField()
    joined = models.DateTimeField(auto_Now_add=True)

这是我在 views.py 中的视图集:

class ShopSerializer(serializers.ModelSerializer):
    class Meta:
        model = Shop
        fields= '['name','slug','logo','user','industry','business_start','franchise_start','headquarter','units','description','joined']'

所以我想知道如何在 logo 字段中重命名上传的图像。

解决方法

您要做的是在模型级别处理文件名修改,以便从您的自定义视图,django admin甚至django-rest-framework上传的所有内容都将得到相同处理。

从您的摘录中,您似乎正在尝试执行此操作,但是我没有在rename_and_path的位置进行定义。

因此,请在您的Shop模型上方定义以下方法


def logo_dir_path(instance,filename):
    extension = filename.split('.')[-1]
    og_filename = filename.split('.')[0]
    new_filename = "shop_%s.%s" % (instance.name,extension)

    return new_filename

然后在模型的徽标字段中,添加以下属性:

logo = models.ImageField(upload_to=logo_dir_path)