mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-16 20:00:23 +00:00
Overriding TimeStampedModel's save() method (#412)
* Overriding TimeStampedModel's save() method to update modified field automatically when update_fields argument is used but modified was not given as a parameter. * fixed a small error in logic * added tests for new functionality
This commit is contained in:
parent
1386c379b7
commit
3e32ae257b
2 changed files with 38 additions and 0 deletions
|
|
@ -28,6 +28,16 @@ class TimeStampedModel(models.Model):
|
|||
created = AutoCreatedField(_('created'))
|
||||
modified = AutoLastModifiedField(_('modified'))
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""
|
||||
Overriding the save method in order to make sure that
|
||||
modified field is updated even if it is not given as
|
||||
a parameter to the update field argument.
|
||||
"""
|
||||
if 'update_fields' in kwargs and 'modified' not in kwargs['update_fields']:
|
||||
kwargs['update_fields'] += ['modified']
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
|
|
|||
|
|
@ -90,3 +90,31 @@ class TimeStampedModelTests(TestCase):
|
|||
self.assertEqual(t1.created, different_date2)
|
||||
self.assertNotEqual(t1.modified, different_date2)
|
||||
self.assertNotEqual(t1.modified, different_date)
|
||||
|
||||
def test_save_with_update_fields_overrides_modified_provided(self):
|
||||
'''
|
||||
Tests if the save method updated modified field
|
||||
accordingly when update_fields is used as an argument
|
||||
and modified is provided
|
||||
'''
|
||||
with freeze_time(datetime(2020,1,1)):
|
||||
t1 = TimeStamp.objects.create()
|
||||
|
||||
with freeze_time(datetime(2020,1,2)):
|
||||
t1.save(update_fields=['modified'])
|
||||
|
||||
self.assertEqual(t1.modified, datetime(2020,1,2))
|
||||
|
||||
def test_save_with_update_fields_overrides_modified_not_provided(self):
|
||||
'''
|
||||
Tests if the save method updated modified field
|
||||
accordingly when update_fields is used as an argument
|
||||
and modified is not provided
|
||||
'''
|
||||
with freeze_time(datetime(2020,1,1)):
|
||||
t1 = TimeStamp.objects.create()
|
||||
|
||||
with freeze_time(datetime(2020,1,2)):
|
||||
t1.save(update_fields=[])
|
||||
|
||||
self.assertEqual(t1.modified, datetime(2020,1,2))
|
||||
|
|
|
|||
Loading…
Reference in a new issue