mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-17 04:10:24 +00:00
Fix TypeError in save when model inherits from both TimeStampModel and StatusModel. (Fixes GH-465)
This commit is contained in:
parent
79ff8ea6be
commit
2269f810c8
4 changed files with 28 additions and 11 deletions
|
|
@ -4,6 +4,8 @@ CHANGES
|
|||
Next release (tbc)
|
||||
------------------
|
||||
- Applied `isort` to codebase (Refs GH-#402)
|
||||
- Fix `TypeError` in save when model inherits from both TimeStampModel
|
||||
and StatusModel. (Fixes GH-465)
|
||||
|
||||
4.1.0 (2020-11-29)
|
||||
------------------
|
||||
|
|
|
|||
|
|
@ -32,10 +32,8 @@ class TimeStampedModel(models.Model):
|
|||
a parameter to the update field argument.
|
||||
"""
|
||||
update_fields = kwargs.get('update_fields', None)
|
||||
if update_fields is not None:
|
||||
update_fields = set(update_fields)
|
||||
if update_fields:
|
||||
kwargs['update_fields'] = update_fields.union({'modified'})
|
||||
if update_fields:
|
||||
kwargs['update_fields'] = set(update_fields).union({'modified'})
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
|
@ -74,12 +72,10 @@ class StatusModel(models.Model):
|
|||
status_changed field is updated even if it is not given as
|
||||
a parameter to the update field argument.
|
||||
"""
|
||||
if (
|
||||
'update_fields' in kwargs
|
||||
and 'status' in kwargs['update_fields']
|
||||
and 'status_changed' not in kwargs['update_fields']
|
||||
):
|
||||
kwargs['update_fields'] += ['status_changed']
|
||||
update_fields = kwargs.get('update_fields', None)
|
||||
if update_fields and 'status' in update_fields:
|
||||
kwargs['update_fields'] = set(update_fields).union({'status_changed'})
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
|
|
|
|||
|
|
@ -447,3 +447,13 @@ class CustomNotPrimaryUUIDModel(models.Model):
|
|||
|
||||
class SaveSignalHandlingTestModel(SaveSignalHandlingModel):
|
||||
name = models.CharField(max_length=20)
|
||||
|
||||
|
||||
class TimeStampWithStatusModel(TimeStampedModel, StatusModel):
|
||||
STATUS = Choices(
|
||||
("active", _("active")),
|
||||
("deleted", _("deleted")),
|
||||
("on_hold", _("on hold")),
|
||||
)
|
||||
|
||||
test_field = models.PositiveSmallIntegerField(default=0)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from django.test import TestCase
|
|||
from freezegun import freeze_time
|
||||
from parameterized import parameterized
|
||||
|
||||
from tests.models import TimeStamp
|
||||
from tests.models import TimeStamp, TimeStampWithStatusModel
|
||||
|
||||
|
||||
class TimeStampedModelTests(TestCase):
|
||||
|
|
@ -149,3 +149,12 @@ class TimeStampedModelTests(TestCase):
|
|||
t1.save(update_fields=None)
|
||||
|
||||
self.assertEqual(t1.modified, datetime(2020, 1, 2))
|
||||
|
||||
def test_model_inherit_timestampmodel_and_statusmodel(self):
|
||||
with freeze_time(datetime(2020, 1, 1)):
|
||||
t1 = TimeStampWithStatusModel.objects.create()
|
||||
|
||||
with freeze_time(datetime(2020, 1, 2)):
|
||||
t1.save(update_fields=['test_field', 'status'])
|
||||
|
||||
self.assertEqual(t1.modified, datetime(2020, 1, 2))
|
||||
|
|
|
|||
Loading…
Reference in a new issue