diff --git a/CHANGELOG.md b/CHANGELOG.md index dd19925a..9c9ca3fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed +- Allow `_bulk_create=True` without `_quantity` ([#462](https://github.com/model-bakers/model_bakery/issues/462)) ### Removed diff --git a/model_bakery/baker.py b/model_bakery/baker.py index 8f612067..adc2f025 100644 --- a/model_bakery/baker.py +++ b/model_bakery/baker.py @@ -135,8 +135,9 @@ def make( if _valid_quantity(_quantity): raise InvalidQuantityException - if _quantity and _bulk_create: - return bulk_create(baker, _quantity, _save_kwargs=_save_kwargs, **attrs) + if _bulk_create: + result = bulk_create(baker, _quantity or 1, _save_kwargs=_save_kwargs, **attrs) + return result if _quantity else result[0] elif _quantity: return [ baker.make( diff --git a/tests/test_baker.py b/tests/test_baker.py index 6c7c3639..395502cd 100644 --- a/tests/test_baker.py +++ b/tests/test_baker.py @@ -182,6 +182,19 @@ def test_make_quantity_respecting_bulk_create_parameter(self): ) assert models.NonStandardManager.manager.count() == 3 + @pytest.mark.django_db + def test_make_bulk_create_without_quantity(self): + """Issue #462: _bulk_create=True without _quantity should use bulk_create.""" + with patch.object( + models.Person._base_manager, + "bulk_create", + wraps=models.Person._base_manager.bulk_create, + ) as mock_bulk: + person = baker.make(models.Person, _bulk_create=True) + mock_bulk.assert_called_once() + assert isinstance(person, models.Person) + assert person.pk is not None + @pytest.mark.django_db def test_make_raises_correct_exception_if_invalid_quantity(self): with pytest.raises(InvalidQuantityException):