Je rencontre des problèmes pour établir une relation many-to-many avec un ensemble de modèles django dans factory boy, en utilisant une relation through. J'ai un tas de recettes et d'ingrédients. Il existe une relation plusieurs-à-plusieurs entre les recettes et les ingrédients grâce à un modèle qui définit une quantité. J'ai des usines pour chaque modèle mais je n'arrive pas à les relier.Comment définir dynamique beaucoup à plusieurs dans l'usine garçon avec une table à travers?
simplifié models.py:
class Ingredient(models.Model):
name = models.CharField(max_length=40)
class Recipe(models.Model):
name = models.CharField(max_length=128)
ingredients = models.ManyToManyField(Ingredient, through='RecipeIngredient')
class RecipeIngredient(models.Model):
recipe = models.ForeignKey(Recipe)
ingredient = models.ForeignKey(Ingredient)
quantity = models.IntegerField(default=1)
factories.py
class RecipeFactory(factory.django.DjangoModelFactory):
class Meta:
model = Recipe
class IngredientFactory(factory.django.DjangoModelFactory):
class Meta:
model = Ingredient
class RecipeIngredientFactory(factory.django.DjangoModelFactory):
class Meta:
model = RecipeIngredient
recipe = factory.SubFactory(RecipeFactory)
ingredient = factory.SubFactory(IngredientFactory)
quantity = 1
simplifié j'ai essayé de jouer avec factory.RelatedFactory mais n'a pas encore vraiment nulle part. Idéalement, je veux juste être en mesure de faire ce qui suit:
recipe = RecipeFactory(name="recipe1")
ingredient = IngredientFactory(name="ingredient1")
ri = RecipeIngredientFactory(recipe=recipe, ingredient=ingredient)
Faire cela mais ne définit pas le plusieurs à plusieurs de chaque côté, et semble aussi manquer de créer le modèle de recipeingredient lui-même. Est-ce que quelqu'un sait d'une manière de faire ceci?
Edit:
J'ai aussi essayé:
class RecipeWith3Ingredients(RecipeFactory):
ingredient1 = factory.RelatedFactory(RecipeIngredientFactory, 'recipe')
ingredient2 = factory.RelatedFactory(RecipeIngredientFactory, 'recipe')
ingredient3 = factory.RelatedFactory(RecipeIngredientFactory, 'recipe')
Mais ne peux pas obtenir ma tête comment je crée ces objets avec une recette pré-existante et un ensemble d'ingrédients.
Merci! Cela m'a un peu aidé - je pense en effet que j'avais la méthode de sauvegarde sur mon modèle de jointure un peu mutilé qui me causait des maux de tête, j'accepte ceci cependant principalement pour l'effort extraordinaire que vous avez fait - merci! - La prime est à vous. – bharling
Je pense que les docs pour factory-boy sont un peu trompeurs cependant, les instructions spécifiques pour instancier plusieurs à plusieurs relations avec une table à travers n'indiquent pas vraiment que vous pouvez le faire comme ci-dessus, mais en fait vous pouvez. – bharling
Pas de soucis, content qu'il soit d'une certaine utilité :) – tdsymonds