models 常用字段和参数
models中的常用字段
AutoField(primary_key=True) 主键字段 如果没有主键字段django会自动创建一个id 为主键字段
CharField(max_length=32) varchar(32)
IntegerField() int
BigIntergerField() bigint
DecimalField() decimal
EmailField() varchart(254)
DateField() date
DateTimeField() datetime
auto_now:每次编辑数据的时候都会自动更新该字段时间
auto_now_add:创建数据的时候自动更新
BooleanField(Field)
给该字段传布尔值 会对应成 数字0/1
is_delete
is_status
is_vip
TextField(Field)
- 文本类型
存储大段文本
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录,只存文件路径
upload_to = '指定文件路径'
给该字段传文件对象 文件会自动保存到upload_to指定的文件夹下 然后该字段存文件的路径
如何自定义char类型字段
from django.db.models import Field
class RealCharField(Field):
def __init__(self,max_length,*args,**kwargs):
self.max_length = max_length # 拦截一个父类的方法 操作完之后 利用super调用父类的方法
super().__init__(max_length=max_length,*args,**kwargs)
def db_type(self, connection):
return 'char(%s)'%self.max_length
class Movie(models.Model):
textField = RealCharField(max_length=64)
字段内的关键性参数
null
default
uique = True
db_index = True
django 1.x默认就是级联更新级联删除 django2.x需要你自己手动指定
on_delete = models.CASCADE
db_contraints = True
字段chices参数


自定义字段类型 继承的本质:拦截父类方法 调用父类__init__ 方法生成对象,可以确定父类中有max_length属性

对象进行sql操作 打印sql语句的配置
直接在setting文件中加入 如下语句即可
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}


数据库查询优化

only 与 defer


select_related 与 prefetch_related


select_related 与 prefetch_related 优缺点比较 不一定哪一种效率高 具体要看情况
