我有一个 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/