Adding more views to a Router or viewset (Django-Rest-Framework)

后端 未结 4 542
既然无缘
既然无缘 2021-02-05 04:48

Essentially, I\'m trying to find a good way to attach more views to a Router without creating a custom Router. What\'s a good way to accomplish this?

He

4条回答
  •  [愿得一人]
    2021-02-05 05:19

    The answer given by mariodev above is correct, as long as you're only looking to make GET requests.

    If you want to POST to a function you're appending to a ViewSet, you need to use the action decorator:

    from rest_framework.decorators import action, link
    from rest_framework.response import Response
    
    class MyObjectsViewSet(viewsets.ViewSet):
    
        # For GET Requests
        @link()
        def get_locations(self, request):
            """ Returns a list of location objects somehow related to MyObject """
            locations = calculate_something()
            return Response(locations)
    
        # For POST Requests
        @action()
        def update_location(self, request, pk):
            """ Updates the object identified by the pk """
            location = self.get_object()
            location.field = update_location_field() # your custom code
            location.save()
    
            # ...create a serializer and return with updated data...
    

    Then you would POST to a URL formatted like: /myobjects/123/update_location/

    http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing has more information if you're interested!

提交回复
热议问题