gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:36:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com