django – 覆盖models.Model中每个类的save方法
发布时间:2020-12-20 11:52:28 所属栏目:Python 来源:网络整理
导读:我需要获取每个类,继承models.Model以创建和更新字段.我可以通过向每个字段添加自定义保存方法来实现此目的, def save(self,*args,**kwargs): if not self.id: self.created = timezone.now() self.modified = timezone.now() return super(`models.Model`,s
我需要获取每个类,继承models.Model以创建和更新字段.我可以通过向每个字段添加自定义保存方法来实现此目的,
def save(self,*args,**kwargs): if not self.id: self.created = timezone.now() self.modified = timezone.now() return super(`models.Model`,self).save(*args,**kwargs) 但这违反了NeverRepeatYourself规则. 我试图覆盖models.Model: class LogModel(models.Model): created = models.DateTimeField(editable=False) updated = models.DateTimeField() def save(self,**kwargs): if not self.id: self.created = timezone.now() self.updated = timezone.now() return super(LogModel,**kwargs) 并使用LogModel而不是models.Model,但失败了,错误E006( 编辑 我的主要问题是如何在models.py中为所有模型添加自定义特定字段 解决方法
您的基本模型必须是抽象的:
class LogModel(models.Model): class Meta: abstract = True created = models.DateTimeField(editable=False) updated = models.DateTimeField() def save(self,force_insert=False,force_update=False,using=None,update_fields=None): # Use self._state.adding to check if this is a new instance,# ID not being empty is not a guarantee that the instance # exists in the database # and if `update_fields` is passed,you must add the fields to the # list or they won't be saved in the database. if force_insert or self._state.adding: self.created = timezone.now() if update_fields and 'created' not in update_fields: update_fields.append('created') self.updated = timezone.now() if update_fields and 'updated' not in update_fields: update_fields.append('updated') return super(LogModel,**kwargs) 但是,如果重写save()方法,则意味着它不能以任何形式编辑.如果这是你想要的,那么你最好使用auto_now和auto_now_add: class LogModel(models.Model): class Meta: abstract = True created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |