外观
数据模型
使用Django编写数据库驱动的web网站时,第一步就是定义数据模型。Django支持ORM,所以可以使用关系模型操作关系型数据库。
在应用中添加数据模型
在article/models.py中,创建User类和Articles模型类,代码如下。
from django.db import models
class User(models.Model):
"""
User模型类,数据模型应继承自models.Model或其子类
"""
id = models.IntegerField(primary_key=True) # 主键
user = models.CharField(max_length=30) # 用户名,字符串类型
email = models.CharField(max_length=30) # 邮箱,字符串类型
class Article(models.Model):
"""
Article模型类,数据模型应继承自models.Model或其子类
"""
id = models.IntegerField(primary_key=True) # 主键
title = models.CharField(max_length=120) # 标题,字符串类型
content = models.TextField() # 文章,文本类型
publish_time = models.DateTimeField() # 出版时间,日期时间类型
user = models.ForeignKey(User, on_delete=models.CASCADE) # 设置外键上述代码中,每个模型的属性都指明了models下的一个数据模型,代表了数据库中的每一个字段。Django的db.models给出了如下的常见字段类型。
| 字段类型 | 说明 |
|---|---|
| AutoField | 一个id自增的字段,创建表的过程中,Django会自动添加一个自增的主键字段 |
| BinaryField | 一个保持二进制源数据的字段 |
| BooleanField | 一个布尔值字段,需要指明默认值。管理后台中默认呈现为CheckBox形式 |
| NullBooleanField | 可以为None值的布尔值字段 |
| CharField | 字符串字段,必须指明max_length参数值。管理后台默认呈现为TextInput形式 |
| TextField | 文本域字段,对于大量文本应该使用TextField。管理后台默认呈现为TextArea形式 |
| DateField | 日期字段,代表Python的datetime.date实例。管理后台默认呈现为TextInput形式 |
| DateTimeField | 时间字段,代表Python中的datetime.datetime实例。管理后台默认呈现TextInput形式 |
| EmailField | 邮件字段,是CharField的实现,用于检查该字段是否符合邮件的格式 |
| FileField | 上传文件字段,管理后台默认呈现ClearableFileInput形式 |
| ImageField | 图片上传字段,是FileField的实现。管理后台默认呈现ClearableFileInput形式 |
| IntegerField | 整数字段,在管理后台默认呈现NumberInput或TextInput形式 |
| FloatField | 浮点数值字段,在管理后腰默认呈现NumbrtInput或TextInput形式 |
| SlugField | 只保存字母、数字、下画线和连接符,用于生成url的短标签 |
| UUIDField | 保存一般统一标识符的字段,代表Python中的UUID实例,建议提供默认值(default) |
| ForeignKey | 外键关系字段,需要提供外键的模型参数和on_delete参数(指定当该模型实例删除时,是否删除关联模型)。若要外键的模型出现在当前模型的后面,需要在第一个参数中使用单引号 |
| ManyToManyField | 多对多关系字段,与ForeignKey字段类似 |
| OneToOneFIeld | 一对一关系字段,常用于扩展其他模型 |