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