我目前与django rest建立的关系是:
型号名称:动漫
型号名称:剧集
所以基本上我想实现的是:
如果我请求api/剧集/{anime\u name}/
我把那部动画片的情节列出来了
我该怎么做
情节序列化程序
class EpisodesSerializer(serializers.ModelSerializer):
class Meta:
model = Episodes
fields = '__all__'
路由器
router = routers.DefaultRouter()
router.register('animes', AnimesViewSet, 'animes')
router.register('episodes', EpisodesViewSet, 'episodes')
urlpatterns = router.urls
场景视图集
class EpisodesViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.AllowAny]
MainModel = Episodes
queryset = Episodes.objects.all()
serializer_class = EpisodesSerializer
编辑
正如评论中提到的,DRF的较新版本使用@action,因为@detail\u route和@list\u route已被弃用
要使用不同的字段进行查找,可以自己实现获取对象的逻辑,但必须确保用于查找的字段是唯一的,否则可以返回许多对象
因此,假设动画
name
是唯一的,并且您希望使用它进行查找,您可以这样做:您还可以检查
get_object()
是如何实现的,以使其更加健壮。 我为自己创建了一个通用视图mixin,它允许从主pk lookup字段使用多个唯一字段aprt进行查找:您所要做的就是将它添加到视图的基类中,并在
alternate_lookup_fields
属性中添加用于查找的字段(在您的例子中是名称)。当然,只能使用唯一字段至于过滤,您可以检查过滤的简单程度here。 但是,我建议使用更通用的过滤器后端,如django-filter
原始答案
首先,url看起来更具初始化性,如下所示:
这是因为您通常应该从一个更通用的资源到更具体的资源
为了实现这一点,在AnimeViewSet(而不是eposodesviewset)中,您可以有这样一个情节的详细路线:
您也可以使用eposodesviewset上的过滤器以这种方式获取属于特定动画的片段:
相关问题 更多 >
编程相关推荐