Полная ссылка для медиа в django-rest

Я написал это представление:

api_view(["GET"])
def article_grid_list(request):
        # fetched data from database
        data = Articles.objects.all().order_by("-created_date")[:11]
        pinned_article = Articles.objects.get(pinned=True)

        # serialized data
        pinned_data = ArticlesSerializer(pinned_article)
        horizontal_data = ArticlesSerializer(data[:3], many=True)
        small_data = ArticlesSerializer(data[3:8], many=True)
        card_data = ArticlesSerializer(data[8:], many=True)

        

        final_data = {
            "pinned":pinned_data.data,
            "horizontal": horizontal_data.data,
            "small": small_data.data,
            "card": card_data.data
        }

Когда я печатаю результат этого маршрута, я получаю поле 'cover' следующим образом : "cover": "/media/article/artice_cover_NkOUuZ7vH3zEejCgV.jpg",

но когда я пишу эту функцию как ModelViewSet я получаю полный url поля обложки а я хочу получать полный url в каждом запросе

modelViewSet Пример :

class ArticleGridList(viewsets.ModelViewSet):
    queryset = Articles.objects.all().order_by("-created_date")
    serializer_class = ArticlesSerializer

Я кроме этого : "cover": "http://localhost:8000/media/article/artice_cover_NkOUuZ7vH3zEejCgV.jpg",

файл urls.py моего приложения :

router = routers.SimpleRouter()
router.register('articles', ArticlesViewSet)
urlpatterns = [
  path("article-grid-list/", article_grid_list)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += router.urls```

Вам нужно отправить context = {'request':request} в сериализатор следующим образом ...

Путь - 1

# serialized data
pinned_data = ArticlesSerializer(pinned_article,context = {'request':request})
horizontal_data = ArticlesSerializer(data[:3], many=True,context = {'request':request})
small_data = ArticlesSerializer(data[3:8], many=True,context = {'request':request})
card_data = ArticlesSerializer(data[8:], many=True,context = {'request':request})

way - 2 (для применения этого метода необходимо добавить context = {'request':request}` в сериализатор, как в методе выше.

class ArticleSerializer(serializers.ModelSerializer):
    cover = serializers.SerializerMethodField()
    def get_cover(self,obj):
        request = self.context.get('request')
        str(request.build_absolute_uri(obj.cover.url))
Вернуться на верх