【问题标题】:How do I rename image that I uploaded through Django Rest Framework如何重命名通过 Django Rest Framework 上传的图像
【发布时间】:2020-11-01 15:13:40
【问题描述】:

我在重命名上传的图片时遇到问题。我希望我上传的图像具有名称model['name'].jpg,而不是使用原始名称。如果我直接从 django 上传它,我没有问题,但如果我通过 Django Rest Framework 上传图像,我不知道该怎么做。

这是我的 model.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)

这是我的 serializer.py

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

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

class ShopViewSet(ModelViewSet):
    queryset = Shop.objects.all()
    serializer_class = ShopSerializer
    lookup_field = 'slug'

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.initial_data['user'] = request.user.id
        serializer.initial_data['slug'] = slugify(request.data['name'])
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

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

【问题讨论】:

    标签: python django django-models django-rest-framework imagefield


    【解决方案1】:

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

    从您的 sn-ps 看来,您正在尝试执行此操作,但我没有定义 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 字段中,添加以下属性:

    logo = models.ImageField(upload_to=logo_dir_path)
    

    【讨论】:

    • 我尝试再次这样做,是的,它有效。我只知道它适用于通用,不管我们如何上传它。我的rename_and_path 确实有效,但我为图像名称选择了错误的字段。
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2016-03-23
    • 2015-11-29
    • 2019-03-24
    • 2018-01-17
    • 2018-01-15
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多