为了实现新的业务功能,我们需要创建一些表,因此需要接触到Django的模型处理。在这一章中,学创建两张表。
step1: 打开sign下的models.py文件,写入下列代码。
from django.db import models
# Create your models here.
# 发布会表
class Event(models.Model):
name = models.CharField(max_length=100) # 发布会标题
limit = models.IntegerField() # 参加人数
status = models.BooleanField() # 状态
address = models.CharField(max_length=200) # 地址
start_time = models.DateTimeField('events time') # 发布会时间
create_time = models.DateTimeField(auto_now=True) # 创建时间 (自动获取当前时间)
def __str__(self):
return self.name
# 嘉宾表
class Guest(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE) # 关联发布会 id
realname = models.CharField(max_length=64) # 嘉宾姓名
phone = models.CharField(max_length=16) # 嘉宾手机号
email = models.EmailField() # 邮箱
sign = models.BooleanField() # 签到状态
create_time = models.DateTimeField(auto_now=True) # 创建时间
class Meta:
unique_together = ("event", "phone")
def __str__(self):
return self.realname
- 首先定义数据表的类都继承自 models.Model,所以先要引入 models模块
- Guest类和Event类下的类属性就是表中各个字段
- 支持的字段类型比较多,可以参考 https://docs.djangoproject.com/en/dev/ref/models/fields/#model-field-types
- class Meta:中定义各种非字段内容,可以参考 https://docs.djangoproject.com/en/dev/ref/models/options/ 这里定义了一个联合主键
- __str__方法重写后,打印相关对象时,打印的内容就是__str__()返回的值
step2: 创建数据库表,先后运行 "makemigrations sign" 和“migrate",相关的数据表将创建完毕。
step3: 用SQLiteStudio查看表,已经创建成功
补充1:在第17篇中,加入verbose_name后,在admin后台看看有没有什么变化?
class Guest(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE) # 关联发布会 id
realname = models.CharField(max_length=64, verbose_name='嘉宾姓名') # 嘉宾姓名
phone = models.CharField(max_length=16, verbose_name='嘉宾手机号') # 嘉宾手机号
补充2:连表结构
- 一对多:models.ForeignKey(其他表)
- 多对多:models.ManyToManyField(其他表)
- 一对一:models.OneToOneField(其他表)
应用场景:
- 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。 - 多对多:在某表中创建一行数据是,有一个可以多选的下拉框
例如:创建用户信息,需要为用户指定多个爱好 - 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了
例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据