Python 可以将django视图集与两个序列化程序一起使用吗?

Python 可以将django视图集与两个序列化程序一起使用吗?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个文章的模型,它有很多字段。当有人通过id获取特定文章时,我希望将几乎所有字段发送回客户端 但是,在生成文章列表时,我不想发送包含所有数据的所有文章,而是将每篇文章限制在几个重要的列表字段中,并放弃像content等长字段 我可以通过对django_restframework.viewsets模块进行优雅的调整来实现这些功能,还是应该自己使用django_restframwork.generics来构建api方法 例如: #articles/api/url.py# # ----------

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

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

我可以通过对
django_restframework.viewsets
模块进行优雅的调整来实现这些功能,还是应该自己使用
django_restframwork.generics
来构建api方法

例如:

#articles/api/url.py#
# -------------------- #
从articles.api.views导入ArticlesViewSet
从django.url导入路径
从rest_framework.router导入默认路由器
路由器=默认路由器()
路由器.register(r'',ArticlesViewSet,basename='articles')
urlpatterns=router.url
#articles/api/views.py#
# --------------------- #
从rest_framework.viewset导入模型视图集
从..模型导入文章
从.serializers导入ArticleSerializerFull,ArticleSerializerShort
类别ArticlesViewSet(ModelViewSet):
#也许这里有一些条件代码?
serializer\u class=ArticleSerializerFull
queryset=Article.objects.all()

**我相信您可以通过使用泛型视图来实现这一点**

在您看来

class ArticleListView(ListAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = Article.objects.all()
    serializer_class = ArticleShortSerializer

class ArticleDetailView(RetrieveAPIView):
   permission_classes = (permissions.IsAuthenticated,)
    queryset = Article.objects.all()
    serializer_class = ArticleFullSerializer
     lookup_field = 'pk'



  ****and in urls for details****

path('detail/<int:pk>/', ArticleDetailView.as_view(), name='article-detail'),
class ArticleListView(ListAPIView):
权限\类=(permissions.IsAuthenticated,)
queryset=Article.objects.all()
serializer\u class=ArticleShortSerializer
类ArticleDetailView(RetrieveAppView):
权限\类=(permissions.IsAuthenticated,)
queryset=Article.objects.all()
serializer\u class=ArticleFullSerializer
查找_字段='pk'
****并在URL中查看详细信息****
路径('detail/',articletailview.as_view(),name='article-detail'),

您可以在DRF中使用
get\u serializer\u class()
方法来解决此问题

序列化程序.py views.py
class ArticleListView(ListAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = Article.objects.all()
    serializer_class = ArticleShortSerializer

class ArticleDetailView(RetrieveAPIView):
   permission_classes = (permissions.IsAuthenticated,)
    queryset = Article.objects.all()
    serializer_class = ArticleFullSerializer
     lookup_field = 'pk'



  ****and in urls for details****

path('detail/<int:pk>/', ArticleDetailView.as_view(), name='article-detail'),
class ArticleFullSerializer(serializers.ModelSerializer):

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

class ArticleShortSerializer(serializers.ModelSerializer):

    class Meta:
        model = Order
        fields = ('field1', 'field2' ... 'fieldn')
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