Temporarily disable auto_now / auto_now_add

后端 未结 12 1192
刺人心
刺人心 2020-12-12 17:49

I have a model like this:

class FooBar(models.Model):
    createtime = models.DateTimeField(auto_now_add=True)
    lastupdatetime = models.DateTimeField(auto         


        
12条回答
  •  一生所求
    2020-12-12 18:12

    I needed solution that will work with update_or_create, I've came to this solution based on @andreaspelme code.

    Only change is that You can set skipping by setting modified field to skip not only by actually passing kwarg skip_modified_update to save() method.

    Just yourmodelobject.modified='skip' and update will be skipped!

    from django.db import models
    from django.utils import timezone
    
    
    class TimeTrackableAbstractModel(models.Model):
        created = models.DateTimeField(default=timezone.now, db_index=True)
        modified = models.DateTimeField(default=timezone.now, db_index=True)
    
        class Meta:
            abstract = True
    
        def save(self, *args, **kwargs):
            skip_modified_update = kwargs.pop('skip_modified_update', False)
            if skip_modified_update or self.modified == 'skip':
                self.modified = models.F('modified')
            else:
                self.modified = timezone.now()
            super(TimeTrackableAbstractModel, self).save(*args, **kwargs)
    

提交回复
热议问题