1.查看迁移文件中实际的sql
python manage.py migrate 时,执行了迁移文件
实际上是执行了这些sql
用sqlmigrate 应用名 迁移文件名 可以查看
下图框中,不用加。py
1. 常用的字段属性(CharField等)有哪些
ChatGpt 中关于字段的解释 有道云笔记
公共字段:
- verbose_name 可加,指描述
- help_text 可加,指描述
- default 指定默认值,”“ 或者 123 或者 True(BooleanField 等,其他也有这个)
- null =True 表示可以没有这个值
- blank =True 表示可以为空字符串
- primary_key=True--------------如果指定了这个参数,就是主键,就不会自动生成id字段了
- 比如给id、 加上描述
- id =models.AutoField(primary_key=True, verbosename, help-text )
- 比如给id、 加上描述
- db_index = True , 就会把该字段创建为索引
CharField
- 必须要加 max_length
- unique 默认为False unique=True ,表示有唯一约束
TextField
长文本
DateTimeField
日期加时间
创建时间: 添加参数:auto_now_add=True 表示:添加记录,存值会自动添加这个字段值
更新时间:添加参数:auto_now=True
默认会自动创建一个名为id 的自增主键
怎么自定义表名字,表描述,表排序等
- 默认 应用名_模型类名小写
- 如何定义:
- 在Meta 内部类中,定义类属性 db_table = "表名"
class Meta 补充“
设定表名” db_table="表名"
加描述: verbose_name ="**表"
加描述:verbose_name_plural = "**表们"
排序: ordering=[''id] # 默认就是id排序、'-id'表示降序
小补充: 表名可以在setting中设置表名前缀
如何定义通用类,用来继承的
定义通用类:
需要告诉django,这个是抽象类,有了这个东西,就不会去创建表
class Meta:
abstact =True
还可以定义 def__str__(self) 感觉没啥意思,直接在子类各自定义各自的就好了
注意:
- 规则1:子类最好也各自定义定义好 Meta,不然就会继承模型基类的Meta
- 规则2:子类中定义好了Meta,又想继承基类的Meta,就要class Meta(baseModle.Meta)
- abstact =True 是不会被继承的
推荐做法:
可以在项目地下,弄一个包utils,模块为 models, 或者 base_models
from django.db import models
class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间",help_text="创建时间")
update_time = models.DateTimeField(auto_now=True,verbose_name='更新时间',help_text='更新时间')
class Meta:
abstract =True
补充
还可以有创建人,修改人,部门id,描述(待补充)
定义 关系表:
关系型数据库-表之间的关联关系:
- 一对多
- 一对一
- 多对多
#(一对多) 如项目表和 接口表 关系为 一对多 一个项目有多个接口 一个接口只属于一个项目
一个客户记录可以对应多条订单记录 (百月黑羽项目)
# (一对一)`学生表 与 学生详细信息表为一对一`
# (多对多)`学生表与课程表: 多对多` 一个学生可以选多个课程 一个课程可以被多个人选 一个订单可以采购多种药品 (百月黑羽项目) 而一种药品也可以被多个订单采购
一对多
外键指定在多方。用ForeignKey
推荐命名字:
子表中,定义父表的外键字段时:用父表名
第一个参数有两种写法,一种是引入类名,写类名, (需要导入)
第二种是写字符串(应用名. 类名)。
第二个参数是on_delete , 表示 附表的数据删除之后,子表数据要怎么样(级联删除策略)
参数on_delete(想删除外键指向的表记录,系统的行为)
CaseCASE,表示 父表删除了,相应的子表数据也会删除
set_null , 附表删除了,相应的子表的数据的该字段设置为NULL
set_default ,和上相似,还需要额外指定 default =True????
protect ,保护类型的, 父表的数据有子表的数据再用时,就删除不了
注意: 外键字段,实际在数据库表中的 字段名
一对一:
用OneTOoneField
定义在哪边都行,根据你理解的 业务逻辑来定
注:
外键会自动加上unique=True 的约束 (因为是一对一的关系)
多对多
用ManyToManyField
1.需要在 一个表如上 订单表中 指明 和 药品表 是多对对关系,并指明了哪个是关联表
2. 在关系表中,
两个表的外键都要指出
还可以定义一些新的字段,比如药品数量,表示某个订单,某个药品的数量