From 023ece11983daa6b1a8857362d0dfda3211c1f4c Mon Sep 17 00:00:00 2001 From: Lucas Rangel Cezimbra Date: Thu, 20 Jun 2024 18:06:17 -0300 Subject: [PATCH 1/2] Fix make_recipe to work with _quantity #28 --- model_bakery/baker.py | 6 ++++++ model_bakery/recipe.py | 3 ++- tests/test_recipes.py | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/model_bakery/baker.py b/model_bakery/baker.py index 23b23898..61e16a97 100644 --- a/model_bakery/baker.py +++ b/model_bakery/baker.py @@ -638,6 +638,9 @@ def _handle_one_to_many(self, instance: Model, attrs: Dict[str, Any]): for key, values in attrs.items(): manager = getattr(instance, key) + if callable(values): + values = values() + for value in values: # Django will handle any operation to persist nested non-persisted FK because # save doesn't do so and, thus, raises constraint errors. That's why save() @@ -659,6 +662,9 @@ def _handle_one_to_many(self, instance: Model, attrs: Dict[str, Any]): def _handle_m2m(self, instance: Model): for key, values in self.m2m_dict.items(): + if callable(values): + values = values() + for value in values: if not value.pk: value.save() diff --git a/model_bakery/recipe.py b/model_bakery/recipe.py index c1df72b8..d2f11e7e 100644 --- a/model_bakery/recipe.py +++ b/model_bakery/recipe.py @@ -78,7 +78,8 @@ def _mapping( # noqa: C901 else: mapping[k] = v.recipe.prepare(_using=_using, **recipe_attrs) elif isinstance(v, related): - mapping[k] = v.make() + mapping[k] = v.make + mapping.update(new_attrs) mapping.update(rel_fields_attrs) return mapping diff --git a/tests/test_recipes.py b/tests/test_recipes.py index 2cf531a5..077fe850 100644 --- a/tests/test_recipes.py +++ b/tests/test_recipes.py @@ -406,6 +406,11 @@ def test_related_models_recipes(self): assert lady.dog_set.all()[0].breed == "Pug" assert lady.dog_set.all()[1].breed == "Basset" + def test_related_models_recipes_make_mutiple(self): + ladies = baker.make_recipe("tests.generic.dog_lady", _quantity=2) + assert ladies[0].dog_set.count() == 2 + assert ladies[1].dog_set.count() == 2 + def test_nullable_related(self): nullable = baker.make_recipe("tests.generic.nullable_related") assert nullable.dummynullfieldsmodel_set.count() == 1 From d857068c9ac5f6f9ec250ba5d3190f06395148d7 Mon Sep 17 00:00:00 2001 From: Lucas Rangel Cezimbra Date: Thu, 20 Jun 2024 18:09:10 -0300 Subject: [PATCH 2/2] docs: changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7c6c910..1c0dc752 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed +- Fix `make_recipe` to work with `_quantity` (#28) ### Removed