File tree 2 files changed +10
-6
lines changed
2 files changed +10
-6
lines changed Original file line number Diff line number Diff line change 2
2
3
3
但有的时候读者和读者同样需要沟通,评论别人的评论,俗称** 多级评论** 。
4
4
5
- 要做好多级评论是个复杂的工程,本章将实现其最基础的功能。
5
+ 本章将实现基础的多级评论功能。
6
+
7
+ > 准确的讲是两级评论。
6
8
7
9
## 模型
8
10
@@ -26,7 +28,7 @@ class Comment(models.Model):
26
28
```
27
29
28
30
- 一个父评论可以有多个子评论,而一个子评论只能有一个父评论,因此用了一对多外键。
29
- - 之前的一对多外键,第一个参数直接引用了对应的模型,但是这里显然不能够自己引用自己 ,因此用了传递字符串 ` self ` 的方式,作用都是一样的。
31
+ - 之前的一对多外键,第一个参数直接引用了对应的模型,但是由于语法规则限制,这里显然不能够自己引用自己 ,因此用了传递字符串 ` self ` 的方式,作用都是一样的。
30
32
31
33
进行迁移后,模型就改好了。
32
34
@@ -74,9 +76,9 @@ class CommentSerializer(serializers.ModelSerializer):
74
76
75
77
新增代码大致可以分为三块,让我们来拆解它们:
76
78
77
- - 为了让文章引用更人性化,将 ` article ` 改为超链接字段用了 ` HyperlinkedRelatedField ` ,它和之前用过的 ` HyperlinkedIdentityField ` 差别很小,你可以简化理解为 ` HyperlinkedRelatedField ` 用于对外键关系,而 ` HyperlinkedIdentityField ` 用于对自身。(正确的理解 [ 看这里] ( https://stackoverflow.com/questions/31566675/for-django-rest-framework-what-is-the-difference-in-use-case-for-hyperlinkedrel ) )
79
+ - 为了让文章引用更人性化,将 ` article ` 改为超链接字段用了 ` HyperlinkedRelatedField ` ,它和之前用过的 ` HyperlinkedIdentityField ` 差别很小,你可以简化理解为 ` HyperlinkedRelatedField ` 用于对外键关系,而 ` HyperlinkedIdentityField ` 用于对当前模型自身。(完整的解释 [ 看这里] ( https://stackoverflow.com/questions/31566675/for-django-rest-framework-what-is-the-difference-in-use-case-for-hyperlinkedrel ) )
78
80
- ` parent ` 为父评论,用了嵌套序列化器 ` CommentChildrenSerializer ` 。注意这个序列化器的 ` Meta ` 用 ` exclude ` 来定义不需要的字段。
79
- - 由于我们希望父评论只能在创建时定义 ,后续不能更改(很合理),因此覆写 ` def update(...) ` ,使得在更新评论时忽略掉 ` parent_id ` 参数。
81
+ - 由于我们希望父评论只能在创建时被关联 ,后续不能更改(很合理),因此覆写 ` def update(...) ` ,使得在更新评论时忽略掉 ` parent_id ` 参数。
80
82
81
83
这就完成了。接下来测试。
82
84
@@ -122,7 +124,9 @@ HTTP/1.1 201 Created
122
124
如果我想在更新评论内容的同时修改父评论:
123
125
124
126
``` python
125
- ... > http - a Obama:admin123456 PUT http:// 127.0 .0.1:8000 / api/ comment/ 21 / parent_id= 99 article_id= 2 content= ' comment to parent comment 10' HTTP / 1.1 200 OK
127
+ ... > http - a Obama:admin123456 PUT http:// 127.0 .0.1:8000 / api/ comment/ 21 / parent_id= 99 article_id= 2 content= ' comment to parent comment 10'
128
+
129
+ HTTP / 1.1 200 OK
126
130
...
127
131
{
128
132
...
Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ class ArticleListSerializer(serializers.Serializer):
18
18
``` python
19
19
# article/serializers.py
20
20
21
- rom rest_framework import serializers
21
+ from rest_framework import serializers
22
22
from article.models import Article
23
23
24
24
# 父类变成了 ModelSerializer
You can’t perform that action at this time.
0 commit comments