Model记录原始字段值

场景

某个Model中20个字段左右,记录了不同的版本号,有很多地方会修改版本号的值,现在要记录历次版本号的变化,但是不太可能去改动修改版本号时的代码,只能在保存的时候入手,那首先想到的是在Model instance初始化的时候记录原始的值,在保存的时候比较这些值

解决办法

废话不说,直接上代码

class Version(models.Model):
    field1=models.IntegerField(default=0)
    ...
    def __init__(self, *args, **kwargs):
        super(Version, self).__init__(*args, **kwargs)
        
        self.__important_fields = [x.name for x in POSDBVersion._meta.fields if x.name not in ('id',)] 
        for field in self.__important_fields:
            setattr(self, '__original_%s' % field, getattr(self, field))
    
    def save(self,*args,**kwargs):
        for field in self.__important_fields:
            if getattr(self, '__original_%s' % field)!=getattr(self,field):
                #do something
        super(POSDBVersion, self).save(*args, **kwargs)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,359评论 25 708
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,367评论 11 349
  • 我独自一人走在回家路上上突然间我感觉家乡是那么的荒凉。认不出了那是小时候,充满欢笑的地方。 风沙卷起路上的垃圾,...
    点泪阅读 213评论 0 0
  • 文|诺诺demi 其实接触写作的时间并不晚,从小学开始就独爱写作,那时候还稚嫩的很,只是写作文。但是我没有把写...
    墨墨职场记阅读 299评论 5 11