【发布时间】:2019-05-04 06:51:37
【问题描述】:
当我尝试访问 http://localhost:8000/api/articles/ 时,它工作正常。
当我尝试访问 http://localhost:8000/api/articles/1 时,它工作正常。
当我尝试访问 http://localhost:8000/api/articles/create 时,Django 认为我正在尝试执行 GET 请求 ('get': 'retrieve')。我做错了什么?
错误 invalid literal for int() with base 10: 'create'
urls.py
urlpatterns = [
path('', ArticleViewSet.as_view({'get': 'list'}), name='list'),
path('<pk>/', ArticleViewSet.as_view({'get': 'retrieve'}), name='detail'),
path('create/', ArticleViewSet.as_view({'post': 'create'}) ,name='create'),
]
views.py
class ArticleViewSet(ViewSet):
queryset = Article.objects.all()
def list(self, request):
articles = query_filter(request, ArticleViewSet.queryset)
serializer = ArticleSerializer(articles, many=True)
articles = formatter(serializer.data)
return Response(articles)
def retrieve(self, request, pk=None):
article = get_object_or_404(ArticleViewSet.queryset, pk=pk)
serializer = ArticleSerializer(article, many=False)
article = formatter([serializer.data])
return Response(article)
def create(self, request):
articles = ArticleViewSet.queryset
articles.create(title=request.data['title'], body=request.data['body'])
article = articles.last()
serializer = ArticleSerializer(article, many=False)
article = formatter([serializer.data])
return Response(article)
此外,当我在下面显示的 urlpatterns 中切换 retrieve 和 create 的位置时,我收到此错误 "detail": "Method \"GET\" not allowed."。
urlpatterns = [
path('', ArticleViewSet.as_view({'get': 'list'}), name='list'),
path('create/', ArticleViewSet.as_view({'post': 'create'}), name='create'),
path('<pk>/', ArticleViewSet.as_view({'get': 'retrieve'}), name='detail'),
]
【问题讨论】:
-
不应该
articles.create(是articles.objects.create(? -
@RedCricket 我会解决这个问题,但这似乎不是问题。
标签: django rest post django-rest-framework request