From d9f10a4f1a5ed9711dd1059d89010fa6ca35eb5e Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Fri, 11 Oct 2024 01:10:58 +0800 Subject: [PATCH 1/3] test: add test case for auto now with _fill_optional setting --- tests/test_baker.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_baker.py b/tests/test_baker.py index 46c26c44..f03eb672 100644 --- a/tests/test_baker.py +++ b/tests/test_baker.py @@ -1124,3 +1124,17 @@ def test_make_with_auto_now(self, use_tz, settings): assert instance.created == now assert instance.updated == now assert instance.sent_date == now + + @pytest.mark.django_db + @pytest.mark.xfail + def test_make_with_auto_now_and_fill_optional(self): + instance = baker.make( + models.ModelWithAutoNowFields, + _fill_optional=True, + ) + created, updated = instance.created, instance.updated + + instance.refresh_from_db() + + assert instance.created == created + assert instance.updated == updated From 8932ad1c803a22504a85b36428aa50456c18e1ea Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Fri, 11 Oct 2024 01:12:10 +0800 Subject: [PATCH 2/3] fix: auto now field should be skipped --- model_bakery/baker.py | 12 ++++++++---- tests/test_baker.py | 1 - 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/model_bakery/baker.py b/model_bakery/baker.py index 07d4ee2c..d0f5a0e5 100644 --- a/model_bakery/baker.py +++ b/model_bakery/baker.py @@ -70,6 +70,10 @@ def _valid_quantity(quantity: Optional[Union[str, int]]) -> bool: return quantity is not None and (not isinstance(quantity, int) or quantity < 1) +def _is_auto_datetime_field(field: Field) -> bool: + return getattr(field, "auto_now_add", False) or getattr(field, "auto_now", False) + + def seed(seed: Union[int, float, str, bytes, bytearray, None]) -> None: Baker.seed(seed) @@ -513,10 +517,7 @@ def instance( if isinstance(field, ForeignRelatedObjectsDescriptor): one_to_many_keys[k] = attrs.pop(k) - if hasattr(field, "field") and ( - getattr(field.field, "auto_now_add", False) - or getattr(field.field, "auto_now", False) - ): + if hasattr(field, "field") and _is_auto_datetime_field(field.field): auto_now_keys[k] = attrs[k] if BAKER_CONTENTTYPES and isinstance(field, GenericForeignKey): @@ -589,6 +590,9 @@ def _skip_field(self, field: Field) -> bool: # noqa: C901 else: field.fill_optional = field.name in self.fill_in_optional + if _is_auto_datetime_field(field): + return True + if isinstance(field, FileField) and not self.create_files: return True diff --git a/tests/test_baker.py b/tests/test_baker.py index f03eb672..835c91c5 100644 --- a/tests/test_baker.py +++ b/tests/test_baker.py @@ -1126,7 +1126,6 @@ def test_make_with_auto_now(self, use_tz, settings): assert instance.sent_date == now @pytest.mark.django_db - @pytest.mark.xfail def test_make_with_auto_now_and_fill_optional(self): instance = baker.make( models.ModelWithAutoNowFields, From ab1cfebd98bbc91b0b41174f9214ae1c48b4d201 Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Fri, 11 Oct 2024 01:22:02 +0800 Subject: [PATCH 3/3] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 287d14ab..2d8eb59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed +- Fix support of `auto_now` and `auto_now_add` fields in combination with `_fill_optional` ### Removed