博客五部曲之三 - 博客RESTful
1740 浏览 5 years, 9 months
9 CreateView
版权声明: 转载请注明出处 http://www.codingsoho.com/创建视图
这一节我们会创建一个Create Serializer 以及 CreateView,多数情况下,Create Serializer并不是必须的,但是使用独立的serializer可以让你的代码更简洁。
我们分别添加对应的Serializer, View, URL
class PostCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = [
"title",
# "slug",
"content",
"publish"
]
class PostCreateAPIView(CreateAPIView):
queryset = Post.objects.all()
serializer_class = PostCreateSerializer
urlpatterns = [
url(r'^create$', PostCreateAPIView.as_view(), name="create"),
在Serializer里面,把slug注释掉了,因为我们打算这个filed自动生成,不需要用户输入,这个在model的pre_save里完成。
访问 http://127.0.0.1:8000/api/posts/create ,并填好要post的信息
点击post,结果如下,新的post已生成。
实际上,这个Serializer对Create和Update同样适用,所以我们统一改成PostCreateUpdateSerializer
这个时候如果我们打开它的更新视图,http://127.0.0.1:8000/api/posts/new-post-2/edit , slug字段不见了。因为跟PostDetailSerializer相比,少了slug
class PostUpdateAPIView(UpdateAPIView):
queryset = Post.objects.all()
serializer_class = PostCreateUpdateSerializer
lookup_field = "slug"
视图如下,这时我们可以填入新的post内容,然后PUT完成更新。
使用UpdateView编辑的时候,当前值并不会显示出来,初始页面也会报错“Method Get not allowed”,如果我们想基于当前的内容修改的话,就会比较麻烦。这个在下一节解决。