我不使用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
,这是我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')),
]
答案 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/