Как я могу получить доступ к "промежуточной" таблице join с помощью стандартного фильтра django?
Как я могу получить определенный набор экземпляров RecipeIngredient, предполагая, что я знаю рецепт и его ингредиенты? Я пытался использовать следующий код:
RecipeIngredient.objects.filter(recipe=recipe, ingredient__in=recipe.ingredients.all())
Но он возвращает мне кверисет одного экземпляра, но не нескольких.
class Recipe(models.Model):
name = models.CharField(max_length=200, verbose_name='Name of a recipe')
ingredients = models.ManyToManyField(
'Ingredient',
through='RecipeIngredient',
verbose_name='Ingredients of a recipe'
)
class Ingredient(models.Model):
name = models.CharField(
max_length=256,
verbose_name='Name of an ingredient'
)
class RecipeIngredient(models.Model):
recipe = models.ForeignKey(
'Recipe',
on_delete=models.CASCADE
)
ingredient = models.ForeignKey(
'Ingredient',
on_delete=models.CASCADE
)
amount = models.IntegerField(
validators=[
MinValueValidator(1),
MaxValueValidator(44640)
],
verbose_name='Amount of ingredients'
)
Я не уверен в этом, но попробуйте.
Сначала создайте новый класс, например:
class RecipeIngredientManager(models.Manager):
def function_name(self):
return self.filter(recipe=recipe, ingredient__in=recipe.ingredients.all())
Затем сделайте следующее в классе RecipeIngredient:
objects = ProductManager()
После того, как вы все сделали, сделайте makemigration и migrate:
python manage.py makemigrations
python manage.py migrate