Skip to content

Commit 2190c73

Browse files
author
yangxg
committed
完善注释。
1 parent 8ece27f commit 2190c73

27 files changed

+1727
-472
lines changed

blog/models.py

Lines changed: 24 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,36 @@
11
from django.db import models
22
from django.contrib.auth.models import User
3-
from django.utils.six import python_2_unicode_compatible
43
from django.urls import reverse
4+
from django.utils.six import python_2_unicode_compatible
55

66

7+
# python_2_unicode_compatible 装饰器用于兼容 Python2
78
@python_2_unicode_compatible
89
class Category(models.Model):
910
"""
10-
django 要求我们必须继承 models.Model 类
11+
Django 要求模型必须继承 models.Model 类
1112
Category 只需要一个简单的分类名 name 就可以了。
12-
13-
CharField 指定了 name 的数据类型,
14-
CharField 是字符型,
15-
max_length 指定其最大长度,
16-
超过这个长度的分类名就不能被存入数据库。
17-
18-
当然 django 还为我们提供了各种各样的类型,
19-
如日期时间类型 DateTimeField、
20-
整数类型 IntegerField 等等。
21-
django 内置的类型全部类型可查看文档:
13+
CharField 指定了分类名 name 的数据类型,CharField 是字符型,
14+
CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。
15+
当然 Django 还为我们提供了多种其它的数据类型,如日期时间类型 DateTimeField、整数类型 IntegerField 等等。
16+
Django 内置的全部类型可查看文档:
2217
https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
2318
"""
2419
name = models.CharField(max_length=100)
2520

2621
def __str__(self):
27-
# python_2_unicode_compatible 装饰器用于兼容 Python2
2822
return self.name
2923

3024

3125
@python_2_unicode_compatible
3226
class Tag(models.Model):
3327
"""
34-
标签 Tag 也比较简单,
35-
和 Category 一样。
28+
标签 Tag 也比较简单,和 Category 一样。
3629
再次强调一定要继承 models.Model 类!
3730
"""
3831
name = models.CharField(max_length=100)
3932

4033
def __str__(self):
41-
# python_2_unicode_compatible 装饰器用于兼容 Python2
4234
return self.name
4335

4436

@@ -52,59 +44,37 @@ class Post(models.Model):
5244
title = models.CharField(max_length=70)
5345

5446
# 文章正文,我们使用了 TextField。
55-
# 比较短的字符串存储可以使用 CharField,
56-
# 但对于文章的正文来说可能会是一大段文本,
57-
# 因此使用 TextField 来存储大段文本。
47+
# 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。
5848
body = models.TextField()
5949

60-
# 这两个列分表表示了文章的创建时间和最后一次修改时间,
61-
# 存储时间的列用 DateTimeField。
50+
# 这两个列分别表示文章的创建时间和最后一次修改时间,存储时间的字段用 DateTimeField 类型。
6251
created_time = models.DateTimeField()
6352
modified_time = models.DateTimeField()
6453

65-
# 文章摘要,可以没有文章摘要,
66-
# 但默认情况下 CharField 要求我们必须存入数据,
67-
# 否则就会报错。
68-
# 指定 blank=True 后就可以允许空值了。
54+
# 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。
55+
# 指定 CharField 的 blank=True 参数值后就可以允许空值了。
6956
excerpt = models.CharField(max_length=200, blank=True)
7057

71-
# 这是分类与标签,
72-
# 分类与标签的模型我们已经定义在上面。
73-
# 我们在这里把文章对应的数据库表和分类与标签对应的表关联起来,
74-
# 但是关联形式稍微有点不同。
75-
# 我们规定一篇文章只能对应一个分类,
76-
# 但是一个分类下可以有很多篇文章,
77-
# 所以我们使用的是 ForeignKey,
78-
# 即一对多的关系。
79-
# 而对于标签来说,
80-
# 一篇文章可以有多个标签,
81-
# 同一个标签下也可能有多篇文章,
82-
# 所以我们使用 ManyToManyField,
83-
# 表明这是多对多的关系。
84-
# 同时我们规定文章可以没有标签,
85-
# 因此为标签 tags 指定了 blank=True。
86-
# 如果你对 ForeignKey、ManyToManyField 不了解,
87-
# 请看教程中的解释,
88-
# 亦可参考官方文档:
58+
# 这是分类与标签,分类与标签的模型我们已经定义在上面。
59+
# 我们在这里把文章对应的数据库表和分类、标签对应的数据库表关联了起来,但是关联形式稍微有点不同。
60+
# 我们规定一篇文章只能对应一个分类,但是一个分类下可以有多篇文章,所以我们使用的是 ForeignKey,即一对多的关联关系。
61+
# 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。
62+
# 同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True。
63+
# 如果你对 ForeignKey、ManyToManyField 不了解,请看教程中的解释,亦可参考官方文档:
8964
# https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
9065
category = models.ForeignKey(Category)
9166
tags = models.ManyToManyField(Tag, blank=True)
9267

93-
# 文章作者
94-
# 这里 User 是从 django.contrib.auth.models 导入的。
95-
# django.contrib.auth 是 django 内置的应用,
96-
# 专门用于处理网站用户的注册、登录等流程,
97-
# User 是 django 为我们已经写好的用户模型,
98-
# 这里我们通过 ForeignKey 把文章和 User 关联起来,
99-
# 因为我们规定一篇文章只能有一个作者,
100-
# 而一个作者可能会写多篇文章,
101-
# 因此这是一对多的关系,
102-
# 和 Category 类似。
68+
# 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
69+
# django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
70+
# 这里我们通过 ForeignKey 把文章和 User 关联了起来。
71+
# 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
10372
author = models.ForeignKey(User)
10473

10574
def __str__(self):
106-
# python_2_unicode_compatible 装饰器用于兼容 Python2
10775
return self.title
10876

77+
# 自定义 get_absolute_url 方法
78+
# 记得从 django.urls 中导入 reverse 函数
10979
def get_absolute_url(self):
11080
return reverse('blog:detail', kwargs={'pk': self.pk})

0 commit comments

Comments
 (0)