这篇文章主要讲解了Django model如何重写save和update的一些小问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
成都创新互联公司专注于企业成都营销网站建设、网站重做改版、遂平网站定制设计、自适应品牌网站建设、HTML5、商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为遂平等各大城市提供网站开发制作服务。一个非常实用的小方法
试想一下,Django中如果我们想对保存进数据库的数据做校验,有哪些实现的方法?
我们可以在view中去处理,每当view接收请求,就对提交的数据做校验,校验不通过直接返回错误,不写数据库,校验通过再调用create或update方法写入数据库
以上方式比较简单,容易理解,但随之又带来了麻烦,我们需在所有接收数据的地方都要去校验,那么有没有更加优雅的方式呢?如果你看过我之前的文章『Django使用Signals监测model字段变化发送通知』]就能想到可以通过signals信号来处理,添加一个pre_save的信号,每当数据库数据变更前都会触发pre_save方法,可以在这里进行校验,免去了view中多个地方校验的麻烦
而今天要说的并不是signals,而是另一种比较常用的做法:重写model的save方法
重写save方法
save方法的主要作用就是将一个对象保存到数据库。如果我们想在数据入库之前做一些处理,除了上边提到的signals之外,还可以通过重写save方法来实现。具体实现方式看下面这个例子
假如我们定义了model如下:
class TempTask(models.Model): ... exechost = models.CharField(max_length=64, default='localhost', verbose_name='执行主机') execuser = models.ForeignKey(ExecUser, null=True, on_delete=models.PROTECT, db_constraint=False)