Джанго проект, валидация
перейду к сути: У меня сайт по созданию рецептов, при создании нового рецепта, можно указать ингредиенты, на данный момент, при указании двух одинаковых ингредиентов - вылетает ошибка.
Есть задумка о том, как сделать "сложение двух одинаковых ингредиентов", я хочу впихнуть это всё как-то в модель ингредиентов(Создать для 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})