Джанго проект, валидация

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

Есть задумка о том, как сделать "сложение двух одинаковых ингредиентов", я хочу впихнуть это всё как-то в модель ингредиентов(Создать для Ingredients отдельный Field или в методах валидации делать это сложение), как это мне сделать?(ниже код задумки)


как выглядит на данный момент добавление 2-ух одинаковых ингредиентов:

яблоки - 1г
яблоки - 1г

результат:

ошибка 505

как хочу сделать:

яблоки 1г
яблоки 1г

результат:

яблоки 2г

как выглядит модель на данный момент:

class Ingredient(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Product, on_delete=models.CASCADE)
    amount = models.PositiveIntegerField()

    class Meta:
        verbose_name_plural = 'Продукты'
        verbose_name = 'Продукты'
        constraints = [models.UniqueConstraint(
            fields=["ingredient", "amount", 'recipe'],
            name="ingredient_unique")]

то, что хочу впихнуть:

def ingridient_prepare(self, ingredients):
        idg = {}
        for ingredient in ingredients:
            id = ingredient['ingredient']["id"]
            amount = ingredient['amount']
            if id in idg:
                idg[id] += amount
            else:
                idg[id] = amount
        return idg

вьюха создания рецепта:

@login_required(login_url='/auth/login/')
@require_http_methods(['GET', 'POST'])
def new_recipe(request):
    form = RecipeForm(request.POST or None, files=request.FILES or None,
                      initial={'author': request.user})
    if form.is_valid():
        form.save()
        return redirect('index')
    return render(request, 'recipes/recipe_new.html', {'form': form})

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