OMR创建表

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 )
  • 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. 在关系表中,

两个表的外键都要指出

还可以定义一些新的字段,比如药品数量,表示某个订单,某个药品的数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值