Skip to content

baker.make() with _bulk_create=True doesn't create m2m entries on foreign-key related objects #490

@richardebeling

Description

@richardebeling

Follow-Up to #385, which was fixed in #486. When specifying values for a M2M field inside an object that is itself accessed via a foreign key, baker doesn't create m2m entries when called with _bulk_create=True.

Inside the test suite, with the additional model definition (so we can have a model with a foreign key field to a model with a m2m field -- none of the existing models currently fulfills this condition)

class HomeOwner(models.Model):
    home = models.ForeignKey(Home, on_delete=models.CASCADE)

put this test in class TestCreateM2MWhenBulkCreate:

def test_create_through_foreign_key_field(self):
    dog = baker.make(models.Dog)
    baker.make(models.HomeOwner, home__dogs=[dog], _quantity=10, _bulk_create=True)

    h1, h2 = models.HomeOwner.objects.all()[:2]
    assert list(h1.home.dogs.all()) == list(h2.home.dogs.all()) == [dog]

It fails with the error:

______ TestCreateM2MWhenBulkCreate.test_create_through_foreign_key_field ______
tests/test_baker.py:1101: in test_create_through_foreign_key_field
    assert list(h1.home.dogs.all()) == list(h2.home.dogs.all()) == [dog]
E   assert [] == [<Dog: Dog object (1)>]
E     
E     Right contains one more item: <Dog: Dog object (1)>
E     
E     Full diff:
E     + []
E     - [
E     -     <Dog: Dog object (1)>,
E     - ]

Versions

  • Python: 3.10.12
  • Django: 4.2
  • Model Bakery 1.19.1 (tested at d758c7a)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions