gpt4 book ai didi

python - Django Rest Framework 列表和详细 View 重叠

转载 作者:行者123 更新时间:2023-12-02 17:09:17 25 4
gpt4 key购买 nike

我的 API 将列出播客的一系列剧集。列表本身应该被精简并且没有很多数据小到足以一次拉出整个列表。这是我的 DRF 序列化程序类

class EpisodeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Episode
fields = ('url', 'id', 'title', 'subtitle', 'show_id', 'published_at', 'updated_at')

使用这个 View 效果很好

class EpisodeViewSet(viewsets.ModelViewSet):
queryset = Episode.objects.all().order_by('-published_at')
serializer_class = EpisodeSerializer

“HyperlinkedModelSerializer”还将剧集链接到它们自己的详细 View ,但显然默认使用相同的 View 。现在我想要的是在细节 View 上更加详细,所以我所做的是:

router.register(r'episodes', views.EpisodeViewSet)
router.register(r'episode', views.EpisodeDetailViewSet)

添加了这条路线并做了一个新的 View

class EpisodeDetailViewSet(viewsets.ModelViewSet):
queryset = Episode.objects.all().order_by('-published_at')
serializer_class = EpisodeDetailSerializer

序列化器使用额外的模型来获得更多的细节

class EpisodeDetailSerializer(serializers.ModelSerializer):
chapters = ChapterMarkSerializer(source='chaptermark_set', many=True)
media = MediaClipSerializer(source='mediaclip_set', many=True)
show = ShowSerializer()

class Meta:
model = Episode
fields = ('url', 'id', 'title', 'subtitle', 'show', 'published_at', 'updated_at','description', 'show_notes', 'cover_image', 'updated_at', 'chapters', 'media')
depth = 1

现在这基本上适用于现在使用 /episode/123 格式的每个剧集,但它还会在 /episode URL 下呈现所有剧集的完整细节,并覆盖/不再显示在 API 索引页上的剧集 URL。

我认为这是由于 model = Episode 条目覆盖了负责该模型的其他类?

我认为我的新 View 需要以某种方式限制为不列出所有剧集,然后这两个 View /序列化程序需要以某种方式共存,但我觉得我被困在这里,文档真的帮不了我。

感谢您的任何建议。

最佳答案

我建议不要使用额外的 View 集(这会使您的代码维护起来更复杂),而是简单地覆盖 EpisodeViewSetget_serializer_class。使用self.action属性,您可以检查当前操作并仅使用另一个序列化程序进行详细响应:

class EpisodeViewSet(viewsets.ModelViewSet):
queryset = Episode.objects.all().order_by('-published_at')

def get_serializer_class(self):
if self.action == 'retrieve':
return EpisodeDetailSerializer
return EpisodeSerializer

现在您不需要 EpisodeDetailViewSet 并且在 urls.py 中您将只有一个路由:

router.register(r'episodes', views.EpisodeViewSet)

关于python - Django Rest Framework 列表和详细 View 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50086489/

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