Django ViewSet中detail参数的含义是什么?

lwi*_*win 4 django django-views django-rest-framework

我在 Django ViewSet 中创建了一个自定义操作方法,我看到了 detail 参数。如果我设置,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"})
Run Code Online (Sandbox Code Playgroud)

这是路由器和 URL 模式 =>

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

urlpatterns = [   
    path('api/', include(router.urls))  
]
Run Code Online (Sandbox Code Playgroud)

Hig*_*ato 8

正如文档所述,如果您通过,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"})
Run Code Online (Sandbox Code Playgroud)