【Django Models】虚拟化提取Models公共的功能
1、需求
Django的Models定义了数据库的表,大家使用过程中很多表肯定有许多公共的操作。那么可以将一些公共的操作封装起来,就不需要在每一张表中再来重复的定义和使用了。
2、定义
还是从models中继承,定义一个JsonMode基类
class JsonMode(models.Model):
2.1 虚拟化
#Model基类,不会去创建数据表
#默认按照时间逆序排列
class Meta:
abstract = True
2.2 公共字段,例如排序
#Model基类,不会去创建数据表
#默认按照时间逆序排列
class Meta:
abstract = True
ordering = ['-ModifyTime','-CreateTime','-id']
3、公共函数
如下图,节选了部分函数,此函数有普通的入参self和其他参数
3.1 还未定义的字段操作
特别注意的是,根据列名要进行数据字段的操作,一般的models如下操作即可
self.name = ‘这是一个测试’
在JsonMode中,colname由参数传递进来,则可以使用Python的object的属性设置函数和获取函数setattr和getattr
#根据列名,保留旧值,新值暂时放到末尾,待上传文件成功之后,回调再刷新
setattr(self, colName,getattr(self,colName,'') + GlobalVar.InterStr + filename[0])
3.2 Models的方法调用
models的方法调用,直接使用self调用即可,如self.save()
4、子类实现
如下图,filteTemp继承JsonMode,调用父类的函数使用super(fileTemp,serl).function即可
好记性不如烂笔头