模型方法的自动更新数据库字段

django-computedfields的Python项目详细描述


Build StatusCoverage Status

django计算字段

Django ComputedFields为模型提供自动更新的数据库字段 方法。

使用django 1.10、1.11(python 2.7、3.5、3.6)和django 2.0、2.1进行测试 (python 3.5和3.6)。

示例

只需从ComputedFieldsModel派生模型并将 @computeddecorator位于方法:

fromdjango.dbimportmodelsfromcomputedfields.modelsimportComputedFieldsModel,computedclassMyModel(ComputedFieldsModel):name=models.CharField(max_length=32)@computed(models.CharField(max_length=32))defcomputed_field(self):returnself.name.upper()

computed_field将变成一个真正的数据库字段,并且可以 像其他数据库字段一样访问和搜索。在保存 调用关联的方法并将其结果写入数据库。 使用方法compute('fieldname')可以检查 将被写入,如果您有挂起的更改,这将非常有用:

>>>person=MyModel(forename='berty')>>>person.computed_field# empty since not saved yet>>>person.compute('computed_field')# outputs 'BERTY'>>>person.save()>>>person.computed_field# outputs 'BERTY'

computeddecorator支持 指示对其他模型字段的依赖关系。如果设置,则计算字段 在相关字段发生更改时自动更新:

fromdjango.dbimportmodelsfromcomputedfields.modelsimportComputedFieldsModel,computedclassMyModel(ComputedFieldsModel):name=models.CharField(max_length=32)fk=models.ForeignKey(SomeModel)@computed(models.CharField(max_length=32),depends=['fk#fieldname'])defcomputed_field(self):returnself.name.upper()+self.fk.fieldname

现在对fk.fieldname的更改也将更新computed_field

文件

文件可以找到 here

待办事项

  • 使用select_related和优化更新查询集 prefetch_related

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Selenium Web驱动程序。负载策略不稳定   JAVAsql。SQLException:没有合适的驱动程序无法创建“oracle”类的JDBC驱动程序。jdbc。驾驶员用于连接URL的OracleDriver   java谷歌地图“优化路径点”如何解决旅行推销员的问题?   java这段代码可能会造成潜在的内存泄漏吗?   java更改JCombobox的高度   java如何清除jtable中的数据   JavaHadoop:错误安全性。UserGroupInformation:MapReduce程序中的PriviledgedActionException   java如何将sonarlint添加到gradle任务中?   性能为什么Java排序优于原语计数排序   java Spring属性PlaceHolderConfigure从数据库加载   java从泛型获取类不起作用   java Spring@Transactional传播属性   java试图拥有主菜单和子菜单类   XSL的java后处理步骤   java第一个字母和最后一个字母、第二个字母和倒数第二个字母之间的差值之和,依此类推,直到单词的中心   switch语句在Java中的下一个出发点   java 安卓如何在OnBackpress()时设置viewpager的特定项目位置?