Невозможно опубликовать в Django REST API - PullRequest
0 голосов
/ 03 марта 2020

Я хотел создать ViewSet, который будет возвращать список объектов при выполнении запроса GET, и в случае запроса POST он выполнит функцию и только после этого вернет этот список. Я сделал это как в документации, но получение этого «поста» не допускается.

views.py

class CloudViewSetHosts(viewsets.ModelViewSet):

    queryset = CloudModelHost.objects.all()
    serializer_class = CloudSerializerHosts

    @action(methods=['POST'], detail=True,
            url_path='autodiscovery', url_name='autodiscovery')
    def autodiscovery(self, request, requestDataName=None):

        ... 
        some actions
        ...

        return CloudModelHost.objects.all()

urls.py

router = routers.DefaultRouter()
router.register(r'hosts', CloudViewSetHosts)


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

И вычеркнуть:

curl -X POST  -H 'Accept: application/json; indent=4'

http://IP/api/hosts/test/ -vvv * Попытка IP: 80 ... * TCP_NODELAY set * Подключен к IP (IP) порту 80 (# 0)

POST / api / hosts / test / HTTP / 1.1 Хост: IP User-Agent: curl / 7.65.3 Принять: application / json; indent = 4

  • Пометить пакет как не поддерживающий многоцелевое использование
  • Соединение № 0 с IP-адресом хоста оставлено без изменений

1 Ответ

0 голосов
/ 03 марта 2020

Попробуйте добавить

http_method_names = ['post', ]

непосредственно под операторы назначения набора запросов и сериализатора:

    queryset = CloudModelHost.objects.all()
    serializer_class = CloudSerializerHosts
    http_method_names = ['post', ]
...