Django. Получение данных из модели в форму

Совсем недавно начал изучать django и столкнулся с такой проблемой. Есть модель, которая хранит рецепт, который состоит из списка ингредиентов и их процентном соотношении:

class Recipe(models.Model):
    recipe_name = models.CharField(max_length=200, verbose_name='Название рецепта')
    mass = models.FloatField(default=0, verbose_name='Общая масса')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=0)

    def save(self, *args, **kwargs):
        ings = self.ingredient_set.all()
        for ing in ings:
            ing.concentration = ing.mass / self.mass
            ing.save()
        return super(Recipe, self).save(*args, **kwargs)

    def __str__(self):
        return self.recipe_name

Модель ингредиента:

class Ingredient(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.CharField(max_length=200, verbose_name='Ингредиент')
    mass = models.FloatField(default=0)
    concentration = models.FloatField(default=-1)

    def __str__(self):
        return self.ingredient

    def save(self, *args, **kwargs):
        if not self.pk:
            self.recipe.mass += self.mass
            self.recipe.save()
        else:
            prev_mass = Ingredient.objects.get(pk=self.pk).mass
            if prev_mass != self.mass:
                self.recipe.mass += self.mass - prev_mass
                self.recipe.save()
        self.concentration = (self.mass / self.recipe.mass) * 100

        return super(Ingredient, self).save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.recipe.mass -= self.mass
        self.recipe.save()
        return super(Ingredient, self).delete(*args, **kwargs)

Сделал форму, которая при вводе числа - размера партии, должна выводить рецепт для необходимого объема партии. Сложности появились с передачей списка ингредиентов в функцию:

def batch(request, pk):
    recipe_id = Recipe.objects.get(pk=pk)
    recipe = Recipe.ingredient_set.all()
    if request.method == 'POST':
        form = RecipeBatchForm(request.POST)
        if form.is_valid():
            batch = recipe.ingredient.concentration/100*batch_size
            return batch
    else:
        form = RecipeBatchForm()
    return render(request, 'recipes/recipe_batch.html', {'form': form, 'batch': batch, 'batch_size': batch_size, 'recipe_id': recipe_id})

Ошибка - AttributeError at /recipes/1/batch 'ReverseManyToOneDescriptor' object has no attribute 'all'

Эта конструкция Recipe.ingredient_set.all() прекрасно работает при выводе рецепта в шаблоне, а тут почему-то нет.

Вернуться на верх