Получить параметры файла (размер, имя файла) в django rest framewrok

#django #django-rest-framework

#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
  

Сериализатор:

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

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

Вид:

 class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer
  

Когда я получаю запрос, я получаю заголовок и URL-адрес файла,
Но я хочу получить также размер файла и имя файла.
Как это сделать?

Ответ №1:

Одним из простых решений является переопределение 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  

Комментарии:

1. Это приводит к ошибке FileNotFoundError: [Ошибка 2] Нет такого файла или каталога: ‘/project/media/styles/graded.svg’. Можете ли вы придумать решение?