model_bakery icon indicating copy to clipboard operation
model_bakery copied to clipboard

Using make_recipe with _quantity together with related key only applies to last item created

Open urbnjamesmi1 opened this issue 6 years ago • 4 comments

Using make_recipe with _quantity together with related key only applies to last item created

Given this setup code:

mommy_recipes.py:

dog1 = recipe.Recipe(
     Dog
)

dog2 = recipe.Recipe(
    Dog
)

company = recipe.Recipe(
    Company
)

incomplete_person = recipe.Recipe(
    Person,
    dog_set=recipe.related(dog1, dog2)
)

complete_person = incomplete_person.extend(
    company=recipe.foreign_key(company)
)

In a test python file:

people = mommy.make_recipe("complete_person", _quantity=3)

Expected behavior

That each model in people has the 2 dog instances.

Actual behavior

Only the last item in people has the 2 dog instances. The first 2 are empty.

Reproduction Steps

How to reproduce this issue.

See summary above

Versions

Python: 3.6 Django: 1.9 Model Mommy: 1.6.0

urbnjamesmi1 avatar Apr 18 '19 20:04 urbnjamesmi1

I was able to work around this by calling mommy.make_recipe("complete_person") in a list comprehension, but it's a bug if I use the _quantity keyword

urbnjamesmi1 avatar Apr 18 '19 20:04 urbnjamesmi1

Declaring a kwargs that holds the attrs that transcend one recipe seems a more flexible workaround.

# dog1, dog2, and company as above

person_kwargs={
    'dog_set': recipe.related(dog1, dog2)
)

unemployed_person = Recipe(Person,
    **person_kwargs
)

employed_person = Recipe(Person, 
    company=recipe.foreign_key(company)
    **person_kwargs
)

NOTE: I also reject the notion that you need a company to be complete ;).

danizen avatar Sep 20 '19 15:09 danizen

Then extend doesn't truly extend in all cases. You have to explicitly remember these type of arguments and explicitly specify them each time? That should at least be documented, but it would be nice to have it fixed.

urbnjamesmi1 avatar Sep 20 '19 15:09 urbnjamesmi1

@urbnjamesmi1, yes it is a bug that should be fixed, but wanted to share a possibly useful workaround.

danizen avatar Sep 20 '19 19:09 danizen