django - 如何在 Django-rest 的媒体字段中获取完整的媒体链接?

标签 django django-rest-framework

我写了这个 View :

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": "/media/article/artice_cover_NkOUuZ7vH3zEejCgV.jpg",

但是当我像 ModelViewSet 这样写这个函数时,我得到了 cover 字段的完整 url,我想在每个请求中都得到完整的 URL

模型 View 集示例:

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

我希望这样: “封面”:“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})

方式 - 2(要应用此方法,您需要像上述方法一样在序列化程序中添加 context = {'request':request}`。

class ArticleSerializer(serializers.ModelSerializer):
    cover = serializers.SerializerMethodField()
    def get_cover(self,obj):
        request = self.context.get('request')
        return str(request.build_absolute_uri(obj.cover.url))

关于django - 如何在 Django-rest 的媒体字段中获取完整的媒体链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74536992/

相关文章:

python - FTP 请求错误。 Django、FTP、Python

python - django/python : Google doc viewer issue with . docx/.xlsx/.pptx

python - 无法使用 Django Rest Framework 序列化 AnonymousUser 对象 - 缺少属性

python - DjangoRestFramework : AttributeError: 'str' object has no attribute '_meta'

python - 如何在 Django Rest Framework 中对外部 API 进行分页

python - Django 表单验证包括 session 数据的使用

javascript - 日历 View 有时在 html5 中不起作用

python - 字符串到日期时间 django

python - DRF 测试 JSON 对象列表是否包含特定对象

Django Rest Framework Postman token 认证