PUT请求没有出现在使用ModelViewSet允许的请求

时间:2019-01-31 04:51:26

标签: django django-rest-framework django-views put http-method

我不使用ModelViewSet像文档中能够操作PUT请求。 我的意见,串行器是如下

CREATE OR REPLACE FUNCTION function_b(inputs varchar[])
RETURNS setof integer AS $$
BEGIN
       RETURN QUERY SELECT somecolumn 
          FROM some_things WHERE a_column = ANY ( inputs );
END;
$$ LANGUAGE PLpgSQL;

class PostsViewSet(viewsets.ModelViewSet):
    queryset = PostsModel.objects.all()
    serializer_class = PostsSerializer

PUT方法是在有允许的方法,你可以在图片中看到。 enter image description here

,这是我posts.urls.py即我的应用程序

class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model=PostsModel
        fields=('id','title', 'author', 'body')

这是我的根urls.py

router = DefaultRouter()
router.register('', PostsViewSet)


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

并为此

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/posts', include('posts.urls')),
]

Response

2 个答案:

答案 0 :(得分:1)

我认为问题出在这里

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/posts', include('posts.urls')),  # <-- Here
]

应该是:

path('api/posts/', include('posts.urls')),   # need to append slash after posts

在这里,PUT请求没有问题,问题在于路由本身。当您点击/posts/1时,django找不到它(因为配置不正确)。

答案 1 :(得分:0)

无需在ID后加上斜杠

更改:

http://localhost:8000/api/posts/1/

收件人:

http://localhost:8000/api/posts/1

或将网址格式更改为:

path('api/posts/', include('posts.urls')),

并使用以下网址访问API:

http://localhost:8000/api/posts/1/