15.Django_ORM_创建数据库模型类、常用字段属性和选项

模型类的字段属性和选项

模型类属性命名限制

  1. 不可以是python的保留关键字
  2. 不可用使用连续的_,因为django的查询方式不支持
  3. 定义属性的时候,需要指定字段的类型,可通过字段类型的事参数来制定选项,
  4. 语法:属性名 = models.字段类型(必参、选项)

a、 单个模型时、常用的字段

1.自增长字段
xx = models.AutoField()  # 自增长
xx = models.BigAutoField()  # 自增长,允许可增长的数字更大
2.二进制数据
xx = models.BinaryField()
3.布尔型
xx = models.BooleanField()  # 不允许为空
xx = models.NullBooleanField()  # 允许为空
4.整型
xx = models.PostitiveSmallIntegerField()  # 正整数、最多可存储大小为5个字节
xx = models.SmallIntegerField()  # 整数、6个字节
xx = models.PositiveIntegerField()  # 正整数、10个字节
xx = models.IntegerField()  # 整数、11个字节
xx = models.BigIntegerField()  # 整数、20个字节
5.字符串
xx = models.CharField()  #  对应sql的vachar
xx = models.TextField()  #  对应sql的longtext
6.时间日期类型
xx = models.DateField()  # 年月日
xx = models.DateTimeField()  # 年月日时分秒
xx = models.DurationField()  # int,底层是python timedelta
7.浮点型
xx = models.FloatField()  # float
xx = models.DecimalField()  # 需指定整数的位数、小数的位数
8.其他字段
xx = models.EmailField()  # 邮箱
xx = models.ImageField()  #
xx = models.FileFiled()  # 文件
xx = models.FilePathField()  # 文件路径
xx = models.URLField()
xx = models.UUIDField()
xx = models.GenericIPAddressField()  # ipv4、ipv6地址

b、 多个模型时、关系型字段

  • OneToOneField:一对一
  • ForeignKey:多对一
  • ManyToManyField:多对多;默认或自定义中间表
    polls.pymodels.py
class A(models.Model):
    onetoone = models.OneToOneField(Admin)  # A表和Admin表是一对一关系


class B(models.Model):
    foreign = models.ForeignKey(A)  # B表和A表是多对一关系


class C(models.Model):

    manytomany = models.ManyToManyField(B)  # C表和B表是多对多关系

c、字段参数

1.所有字段都有的参数
db_column="value"  # 给字段设置名称,不使用默认名
primary_key = False/True  # 该字段是否是主键,默认是False
verbose_name='备注名'  # 设置字段的备注名
unique=True/False  # 字段是否是唯一键,字段的数据在表中是唯一的
/* 下面这两个值要一致 */
null=True/False  # 在数据库中,该字段是否可为空,默认不可为空
blank=True/False  #  在前端表单中,该字段是否可为空

db_index = True/False  # 字段设置索引
help_text = 'value'  # 字段帮助文本
editable=True/False  # 是否可对字段值进行编辑,默认是True
default = 'value'  # 设置字段的默认值

# 对应数据库的枚举类型,一般用于可选并且有限的字段,可以提高数据库的查询效率以及节省空间;
# 可以通过self.get_字段名_display()获取元组的第一个值(0, 1, 2)对应的字符串('保密''男''女')
choices=((0, '保密'), (1, '男'), (2, '女'))
2.个别字段具有的参数
# 1.字符串字段
Char = models.CharField(max_leng = 100)  # 设置最大长度为100,为utf8的长度

# 2.日期字段
Date = models.DateField(unique_for_data=True/False)  # 字段日期是否唯一
Date = models.DateField(unique_for_month=True/False)  # 字段月份是否唯一
''' 下面两个字段建议每个模型都加上,以便于后面的排序操作'''
Date = models.DateField(auto_now=True/False)  # 更新的时间(进行更新数据操作时,这个就是更新的时间)
Date = models.DateField(auto_now_add=True/False)  # 新增的时间(进行新增数据操作时,这个就是新增的时间)

# 3.浮点型
Decimal = models.DecimalField(max_digits=4, decimal_places=2)  # 分别是:总共4个位数,小数点2个位数。比如:12.12, 11.31
3.关系型字段具有的参数
## 1. # 指定主表的外键;用于外键反向关联查询,通过副表查询到主表的信息(反向关联名称)
related_name = 'value' 
# 比如:
class A(models.Model):
    onetoone = models.OneToOneField(Admin, related_name = 'one')  # 字表是A,副表是Admin。现在Admin可通过one这个外键字段,查询到A的相关关系

# 2. 当外键关联的的对象被删除时,Django将模仿on_delete参数定义的SQL来执行对应的操作
# 比如:
class B(models.Model):
    foreign = models.ForeignKey(A, on_delete=行为)  
"""
on_delete的值/六种对应的行为:

1.on_delete.models.CASCADE:模拟SQL的ON_DELETE_CASCADE约束,将定义有外键的模型对象同时删除(是当前版本Django的默认操作)
删除级联:比如说A表的一些字段被删除了,那么B表关联到这些字段的数据也会被删除【常用】
class B(models.Model):
    foreign = models.ForeignKey(A, on_delete=行为) 

2.on_delete.PROTECT:阻止1的删除操作,但是抛出ProtectedError异常
被关联的字段被删除后,就抛出ProtectedError异常

3.on_delete.SET_NULL:将外键字段设置为null,只有当字段设置了null=True、blank=True时,才可以使用该行为【常用】
删除置空,当副表中的记录被删除时,子表对应的字段的值设置为null
class B(models.Model):
    foreign = models.ForeignKey(A, on_delete=行为, null = True, blank=True) 

4.on_delete.SET_DEFAULT:将外键字段设置为默认值,只有当字段设置了default参数时,才可以使用
class B(models.Model):
    foreign = models.ForeignKey(A, on_delete=行为, default=1) 

5.on_delete.DO_NOTHING:什么都不处理

6.on_delete.SET(xx):xx可以是一个传递给SET()的值或者一个回调函数的返回值,大小写敏感
"""
4.自关联

一个数据表中,字段A关联字段B。
比如说:地址的省市县,这三个地区从3个不同的模型获取数据,然后使用一对多的外键进行关联。但是这样是不合理的,比较合理的方法是使用自关联来实现:自关联例子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章