diff --git a/src/dirtyfields/dirtyfields.py b/src/dirtyfields/dirtyfields.py index 49023fa..54ea30f 100644 --- a/src/dirtyfields/dirtyfields.py +++ b/src/dirtyfields/dirtyfields.py @@ -1,9 +1,9 @@ from copy import deepcopy - from django.core.exceptions import ValidationError from django.db.models.expressions import BaseExpression from django.db.models.expressions import Combinable from django.db.models.signals import post_save, m2m_changed +from django.utils import timezone from .compare import raw_compare, compare_states, normalise_value @@ -83,6 +83,9 @@ def _as_dict(self, check_relationship, include_primary_key=True): if isinstance(field_value, (BaseExpression, Combinable)): continue + if isinstance(field_value, timezone.datetime) and field.auto_now: + field_value = timezone.now() + try: # Store the converted value for fields with conversion field_value = field.to_python(field_value) diff --git a/tests/models.py b/tests/models.py index b2dd9e9..f879593 100644 --- a/tests/models.py +++ b/tests/models.py @@ -69,6 +69,10 @@ class DatetimeModelTest(DirtyFieldsMixin, models.Model): datetime_field = models.DateTimeField(default=django_timezone.now) +class UpdatedDatetimeModelTest(DirtyFieldsMixin, models.Model): + updated_datetime_field = models.DateTimeField(auto_now=True) + + class CurrentDatetimeModelTest(DirtyFieldsMixin, models.Model): compare_function = ( timezone_support_compare, diff --git a/tests/test_timezone_aware_fields.py b/tests/test_timezone_aware_fields.py index 381d68a..1435c21 100644 --- a/tests/test_timezone_aware_fields.py +++ b/tests/test_timezone_aware_fields.py @@ -4,7 +4,7 @@ from django.test.utils import override_settings from django.utils import timezone as django_timezone -from .models import DatetimeModelTest, CurrentDatetimeModelTest +from .models import DatetimeModelTest, CurrentDatetimeModelTest, UpdatedDatetimeModelTest @override_settings(USE_TZ=True) @@ -107,3 +107,10 @@ def test_datetime_fields_with_current_timezone_conversion_without_timezone_suppo ), ): assert tm.get_dirty_fields() == {} + + +@pytest.mark.django_db +def test_updated_datetime_fields(): + tm = UpdatedDatetimeModelTest.objects.create() + tm.id = 2 + assert list(tm.get_dirty_fields().keys()) == ['id', 'updated_datetime_field']