Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/dirtyfields/dirtyfields.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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)
Expand Down
4 changes: 4 additions & 0 deletions tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
9 changes: 8 additions & 1 deletion tests/test_timezone_aware_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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']