Возвращает полный URL-адрес изображения в Django Rest Framework для изображения

#python #django #serialization #django-rest-framework

#python #django #сериализация #django-rest-framework

Вопрос:

Я столкнулся с проблемой в возвращенном URL-адресе изображения, который не является правильным.

Мой URL-адрес возвращаемого изображения
"/media/slider_image/image/slider_image_4ea48daf-477d-4f00-93cb-7ac87c6f4002.JPG", введите описание изображения здесь

но фактический URL-адрес, ожидаемый от сериализатора, равен

 http://127.0.0.1:8000/media/slider_image/image/slider_image_4ea48daf-477d-4f00-93cb-7ac87c6f4002.JPG
 

Вот мой фрагмент моего кода, который я пробовал.

 class ListSliderSerializer(SliderSerializers):
    images = serializers.SerializerMethodField('get_images')

    def get_images(self, instance):
        return [slider_image.image.url for slider_image in instance.slider_image.all()]


    class Meta(SliderSerializers.Meta):
        fields = (
            'images',
            'section',
            'tag',
        )
 

что я должен вернуть в

 return [slider_image.image.url for slider_image in instance.slider_image.all()]
 

чтобы получить полный URL-адрес для моего изображения?

Ответ №1:

Вы можете использовать метод request.build_absolute_uri(...) —(doc) как

 class ListSliderSerializer(SliderSerializers):
    images = serializers.SerializerMethodField('get_images')

    def get_images(self, instance):
        request = self.context["request"]
        return [
            request.build_absolute_uri(slider_image.image.url)
            for slider_image in instance.slider_image.all()
        ]

    class Meta(SliderSerializers.Meta):
        fields = (
            'images',
            'section',
            'tag',
        ) 

Также обратите внимание, что вы должны передать request сериализатору в качестве контекстных данных