首页 > 解决方案 > Django ViewSet 中详细参数的含义是什么?

问题描述

我在 Django ViewSet 中创建了一个自定义操作方法,我看到 了详细参数。如果我设置detail=True了我不能从 URL 调用这个方法,但是如果我设置了detail=False,我可以调用这个方法。我可以知道详细参数的含义是什么吗?

这是我的观点=>

class TimeSheetViewSet(viewsets.ModelViewSet): 
    queryset = TimeSheet.objects.all()
    serializer_class = TimeSheetSerializer

    @action(methods=['get'], detail=True)
    def byhello(self, request):        
        return Response({"From Hello":"Got it"})

这是路由器和 URL 模式 =>

router.register('timesheets_ts', TimeSheetViewSet, base_name='timesheets')

urlpatterns = [   
    path('api/', include(router.urls))  
]

标签: djangodjango-rest-frameworkdjango-views

解决方案


正如文档所述,如果您通过detail=True,则意味着该路由器将返回一个对象,而如果您不通过detail=True或通过detail=False,它将返回一个对象列表。

要记住的一件事是,如果您不做任何事情或在此函数中不需要单个对象,您可以设置detail=False

在你的情况下,它会是这样的:

@action(methods=['get'], detail=True)
def byhello(self, request, pk=None):
    self.object = self.get_object()        
    return Response({"From Hello":"Got it"})

推荐阅读