python - 是否可以将 django View 集与两个序列化器一起使用?

标签 python django django-rest-framework

我有一个 Articles 的模型其中有很多字段。当有人通过 id 获取特定文章时我想将几乎所有字段发送回客户端。

但是,当生成文章列表时,我不想发送包含所有数据的所有文章,而是将每篇文章限制为几个重要的列表字段,并放弃像 content 这样的长字段。等等..

我可以通过对 django_restframework.viewsets 进行优雅的调整来实现这些目标吗?模块,或者我应该使用 django_restframwork.generics 自己构建 api 方法相反?

示例:

# articles/api/urls.py #
# -------------------- #

from articles.api.views import ArticlesViewSet
from django.urls import path
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'', ArticlesViewSet, basename='articles')
urlpatterns = router.urls
# articles/api/views.py #
# --------------------- #
from rest_framework.viewsets import ModelViewSet

from ..models import Article
from .serializers import ArticleSerializerFull, ArticleSerializerShort


class ArticlesViewSet(ModelViewSet):
    # Perhaps some conditional code here?
    serializer_class = ArticleSerializerFull
    queryset = Article.objects.all()

最佳答案

您可以使用DRF中的get_serializer_class()方法来解决该问题...

序列化器.py

class ArticleFullSerializer(serializers.ModelSerializer):

    class Meta:
        model = Order
        fields = ('__all__')

class ArticleShortSerializer(serializers.ModelSerializer):

    class Meta:
        model = Order
        fields = ('field1', 'field2' ... 'fieldn')

views.py

from rest_framework.viewsets import ModelViewSet


class ArticleViewSet(ModelViewSet):
    serializer_class = ArticleSerializerFull
    queryset = Article.objects.all()

    def get_serializer_class(self):
        if self.action == 'list':
            serializer = ArticleShortSerializer
        else:
            serializer = ArticleFullSerializer
        return serializer

关于python - 是否可以将 django View 集与两个序列化器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59627660/

相关文章:

Python 多处理/队列与cherrypy

python - Django 内部化不工作,按照教程一步一步

python - Django REST 框架;使用 'groups' 字段序列化用户模型时出现问题

django - 如何在 Django Rest Framework(DRF)中为 ModelSerializers 编写自定义字段验证,类似于 Django 中的表单验证?

python - 在设置 View 集时,出现错误 AttributeError : 'function' object has no attribute 'get_extra_actions'

datetime - Elasticsearch无法按日期时间范围过滤

python - __repr__ 的默认实现是否可以在__init__ 函数的基础上进行改进?

python - python中不规则点之间的坐标列表

python - Django 按通用外键排序

python - 如何摆脱 Django Form 的 RadioSelect 生成的虚假选择