一、django模型层用于创建和存储数据,模型的基础知识。
二、创建模型
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('event time') # 发布会开始时间
create_time = models.DateTimeField(auto_now=True) # 发布会创建时间,自动获取
def __str__(self):
return self.name
#嘉宾表
class Guest(models.Model):
# 关联发布会id,models.CASCADE当主表字段被删除时,和它有关的子表字段也会被删除
event = models.ForeignKey(Event,on_delete=models.CASCADE)
realname = models.CharField(max_length=64) # 姓名
phone = models.CharField(max_length=16) # 手机号
email = models.EmailField() # email
sign = models.BooleanField() # 签到状态
create_time = models.DateTimeField(auto_now=True) # 创建时间,自动获取
class Meta:
unique_together = ("event","phone")
def __str__(self):
return self.realname
模型创建成功后,需要在dos命令行执行如下命令完成数据库迁移:
python manage.py makemigrations 应用名
pyhton manage.py migrate
ForeignKey用来创建外键。
Meta是django模型类的内部类,用于定义一些的django模型的行为特性,unique_together用于设置两个字段的联合主键。
__str()__方法考苏python如何将对象已str的方式显示出来。
类型 | 说明 |
---|---|
AutoFiled | 一个IntegerFiled类型的自动增量 |
BooleanFiled | 用于存放布尔类型的数据(true or false) |
CharFiled | 用于存放字符型数据,需要指定长度max_length |
DateFiled | 日期类型,必须为“YY-MM-DD”格式 |
DateTimeFiled | 日期时间类型,必须为“YY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]”格式 |
FloatFiled | 用于存放浮点型数据 |
IntegerFiled | 用于存放整型数据,范围-2147483648到2147483647 |
FilePathFiled | 文件路径类型 |
TextFiled | 用于存放文本类型数据 |
三、基本数据访问
#Event为表对应的python类,create方法的参数及值为类属性及属性对象的值
Event.objects.create(name=name,
limit=limit,
status=status,
address=address,
start_time=start_time,
create_time=create_time)
#查找电话为18711111111并且event_id为1的数据
Guest.objects.get(phone=18711111111, event_id=1)
#查找电话包含187的数据
Guest.objects.filter(phone__contains=187)
#查询表中的所有数据
Guest.objects.all()
#删除电话为18711111111并且event_id为1的数据
Guest.objects.get(phone=18711111111, event_id=1).delete()
#删除电话包含187的数据
Guest.objects.filter(phone__contains=187).delete()
#将电话包含187且event_id为1的数据的sign字段的值都更新为1
Guest.objects.filter(phone=187,event_id=1).update(sign="1")