我尝试创建一个视图,它将接受POST请求并创建我的模型的新实例(参见帖子的底部)。我按照this教程。问题是,当我访问与视图相关联的URL时,它继承自CreateAPIView,我没有看到用于创建新实例的API的html表示形式,我也看到它接受GET请求,而不是文档中提到的POST。
页面看起来像这样
我的views.py
from django.shortcuts import render
from rest_framework.generics import ListAPIView, CreateAPIView
from datingapp.models import Profile
from .serializers import ProfileSerializer, ProfileCreateSerializer
class ProfilesAPIView(ListAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
class ProfileCreateAPIView(CreateAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileCreateSerializer
我的urls.py
from django.conf.urls import url
from django.contrib import admin
from datingapp.views import ProfilesAPIView, ProfileCreateAPIView
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'api/profiles/', ProfilesAPIView.as_view(), name='list'),
url(r'api/profiles/create/$', ProfileCreateAPIView.as_view(), name='create')
]
我的serializers.py
from rest_framework.serializers import ModelSerializer
from datingapp.models import Profile
class ProfileSerializer(ModelSerializer):
class Meta:
model = Profile
fields = [
'name',
'age',
'heigth'
'location',
]
class ProfileCreateSerializer(ModelSerializer):
class Meta:
model = Profile
fields = [
'name',
'age',
'heigth'
'location',
]
在我的settings.py中,我安装了crispy_forms。
我做错了什么?
UPD:这就是我想要实现的目标
如您所见,有一个表单,它只接受POST,并且还说不允许GET
答案 0 :(得分:14)
问题出在你的路由器上。第一个模式匹配api/profiles/
和api/profiles/create/
,因此永远不会评估第二个模式。您正在查看ProfilesAPIView而不是创建视图。
url(r'api/profiles/', ProfilesAPIView.as_view(), name='list'),
url(r'api/profiles/create/$', ProfileCreateAPIView.as_view(), name='create')
要修复它,要么交换网址的顺序,要么在第一个模式的末尾添加$
。 r'api/profiles/$'
答案 1 :(得分:2)
我正在关注教程并遇到类似的问题。可能我没有遵循相同版本的Django Rest Framework并且他们有变化。 但是我解决了这个问题。
class AssetBundleList(generics.ListAPIView):
到
class AssetBundleList(generics.ListCreateAPIView):
希望这有助于某人。