在 django rest framewrok 中获取文件参数(大小、文件名)

yes*_*ema 5 django django-rest-framework

我需要获取文件参数在我的 rest api 中。

模型:

class Movie(models.Model):
    title = models.CharField(max_length=100)
    attachment = models.FileField(upload_to='files/courses/', default=None, blank=True, null=True)

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

序列化器:

class MovieSerializer(serializers.ModelSerializer):
    attachment = serializers.FileField()

    class Meta:
        model = Movie
        fields = ('title','attachment')
Run Code Online (Sandbox Code Playgroud)

看法:

class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer
Run Code Online (Sandbox Code Playgroud)

当我做 GET 请求时,我得到了标题和文件 url,但我也想得到文件大小和文件名。怎么做?

JPG*_*JPG 9

简单的解决方案之一是重写类to_representation()的方法MovieSerializer,如下所示:

class MovieSerializer(serializers.ModelSerializer):
    attachment = serializers.FileField()

    class Meta:
        model = Movie
        fields = ('title', 'attachment')

    def to_representation(self, instance):
        representation = super().to_representation(instance)
        attachment = {
            "url": representation.pop("attachment"),
            "size": instance.attachment.size,
            "name": instance.attachment.name,
        }
        representation['attachment'] = attachment
        return representation
Run Code Online (Sandbox Code Playgroud)