Как я могу получить доступ к "промежуточной" таблице 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
Вернуться на верх