      assert inspector.get_allowed_methods(callback) == ["GET"]
  
      class AViewSet(ModelViewSet):
  
          @detail_route(methods=['options', 'get'])
          def custom_action(self, request, pk):
              pass
  
      callback = AViewSet.as_view({
          "options": "custom_action",
 
</s> remove     @detail_route(methods=['post'], serializer_class=AnotherSerializer)
 </s> add     @action(methods=['post'], detail=True, serializer_class=AnotherSerializer) </s> remove                     description=desc
 </s> add                     description=desc_1 </s> remove     @detail_route(url_name='detail-custom')
 </s> add     @action(detail=True, url_name='detail-custom') </s> remove     @list_route()
 </s> add     @action(detail=False)
        @action(methods=['options', 'get'], detail=True)
      assert inspector.get_allowed_methods(callback) == ["GET"]
  
      class AViewSet(ModelViewSet):
  
        @action(methods=['options', 'get'], detail=True)
          def custom_action(self, request, pk):
              pass
  
      callback = AViewSet.as_view({
          "options": "custom_action",
keep keep keep keep replace keep keep keep keep keep
 Rework dynamic list/detail actions (#5705)

* Merge list/detail route decorators into 'action'

* Merge dynamic routes, add 'detail' attribute

* Add 'ViewSet.get_extra_actions()'

* Refactor dynamic route checking & collection

* Refactor dynamic route generation

* Add 'ViewSet.detail' initkwarg

* Fixup schema test

* Add release notes for dynamic action changes

* Replace list/detail route decorators in tests

* Convert tabs to spaces in router docs

* Update docs

* Make 'detail' a required argument of 'action'

* Improve router docs 
tests/test_schemas.py