ORM当中常用的字段

AutoField
	主键字段 primary_key=True

CharField			varchar
	verbose_name	字段的注释
 	max_length		长度

IntegerField			int
BigIntegerField		    bigint   应用场景:电话号码的存取

DecimalField    		浮点类型
	max_digits=8   		长度
    decimal_places=2    小数位数

EmailFiled				varchar(254)

DateField					date
DateTimeField			datetime
	auto_now:每次修改数据的时候都会自动更新当前时间
    auto_now_add:只在创建数据的时候记录创建时间后续不会自动修改了
    
BooleanField(Field)				- 布尔值类型
	该字段传布尔值(False/True) 	数据库里面存0/1  应用场景:数据是否删除

TextField(Field)					- 文本类型
	该字段可以用来存大段内容(文章、博客...)  没有字数限制
    后面的bbs作业 文章字段用的就是TextField


FileField(Field)					- 字符类型
   upload_to = "/data"
  	给该字段传一个文件对象,会自动将文件保存到/data目录下然后将文件路径保存到数据库中
  /data/a.txt
# django自定义字段

class MyCharField(models.Field):
    def __init__(self,max_length,*args,**kwargs):
        self.max_length = max_length
        # 调用父类的init方法

        # 一定要是关键字的形式传入		
       super().__init__(max_length=max_length,*args,**kwargs)
       
       

	super() 函数是用于调用父类(超类)的一个方法。
	super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
	MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
上述的super是调用__init__方法,传入的方式以关键字的形式进行传入是因为括号当中的参数第一个是verbose_name,如果不按照关键子参数进行传递,第一个参数就变成传递给verbose_name




def db_type(self, connection):
    """
    返回真正的数据类型及各种约束条件
    :param connection:
    :return:
    """
    return 'char(%s)'%self.max_length
# 自定义字段使用

myfield = MyCharField(max_length=16,null=True)

# 外键字段及参数
# unique相当于是OneToOne
unique=True
	ForeignKey(unique=True)   ===	OneToOneField()

# 你在用前面字段创建一对一 orm会有一个提示信息 orm推荐你使用后者但是前者也能用

db_index
	如果db_index=True 则代表着为此字段设置索引


to_field
	设置要关联的表的字段  默认不写关联的就是另外一张的主键字段

on_delete
	当删除关联表中的数据时,当前表与其关联的行的行为。

  django2.X及以上版本 需要你自己指定外键字段的级联更新级联删除

posted @ 2020-12-31 21:44  Ailewent  阅读(48)  评论(0)    收藏  举报