Почему не создается объект базы данных django?

Я пытаюсь создать приложение базы данных напитков на django. Я создал модель drinkRecipe с отношением ManyToManyField к модели Ingredients. Я могу успешно добавить ингредиенты в базу данных через UI приложения, но почему-то при создании напитка я не получаю никаких ошибок и не добавляю напиток в базу данных, вместо возврата на индексную страницу меняется только URL текущей страницы. Что я упускаю?

models.py:

class DrinkRecipe(models.Model):
drinkName = models.CharField(max_length=100)
ingredients = models.ManyToManyField(Ingredients)
utensil = models.IntegerField(choices=requiredUtensil, default=0)
preparation = models.CharField(max_length=1000)

def __str__(self):
    return self.drinkName

forms.py:

class DrinkForm(forms.Form):
name = forms.CharField(max_length=100, label="Name:")
utensil = forms.ChoiceField(choices=requiredUtensil, label="Required utensil:")
ingredients = forms.ModelChoiceField(queryset=Ingredients.objects.all(), widget=forms.CheckboxSelectMultiple())
preparation = forms.CharField(widget=forms.Textarea)

views.py:

class AddDrinkView(View):

def get(self, request):
    form_drinks = DrinkForm()
    drinks_list = DrinkRecipe.objects.all()
    context = {
        'form_drinks': form_drinks,
        'drinks_list': drinks_list,
    }
    return render(request, 'shakerApp/add_drink.html', context)

def post(self, request):
    form_drinks = DrinkForm(request.POST)

    if form_drinks.is_valid():

        DrinkRecipe.objects.create(
            name=form_drinks.cleaned_data('name'),
            utensil=form_drinks.cleaned_data('utensil'),
            ingredients=form_drinks.cleaned_data('ingredients'),
            preparation=form_drinks.cleaned_data('preparation')
        )
    else:
        messages.error(request, "Drink form is invalid.")

    return HttpResponseRedirect(reverse('shakerApp:index'))

вместо возврата на индексную страницу меняется только URL текущей страницы. Что я упускаю?

Вероятные причины:

  1. Форма не действительна, но это не обрабатывается должным образом
  2. Вызов DrinkRecipe.objects.create не срабатывает и отлавливается Django
  3. Вызов post терпит неудачу и перехватывается Django

Вы можете отладить это, добавив некоторое утверждение print() или даже try/except вокруг подозрительной части.

На самом деле, проблема была в форме. Модель DrinkRecipe состоит из ManyToManyField, и не была правильно использована в соответствующей форме. По сути, ModelChoiceField не мог работать с widget=forms.CheckboxSelectMultiple(). Спасибо @ThePjot за то, что указал мне правильное направление. Исправлено ниже.

forms.py:

class DrinkForm(forms.Form):
    name = forms.CharField(max_length=100, label="Name:")
    utensil = forms.ChoiceField(choices=requiredUtensil, label="Required utensil:")
    ingredients = forms.ModelMultipleChoiceField(
        queryset=Ingredients.objects.all(),
        widget=forms.CheckboxSelectMultiple()
    )
    preparation = forms.CharField(widget=forms.Textarea)
Вернуться на верх