Django не может получить доступ к переменной из формы, созданной с помощью ModelForm

Я пытаюсь создать простую форму на основе класса ModelForm в Django. К сожалению, я постоянно получаю ошибку UnboundLocalError. Я проверил множество советов по аналогичным вопросам, однако, похоже, что все рекомендации у меня выполнены.

Если я запускаю приведенный ниже код, то получаю следующую ошибку: UnboundLocalError: cannot access local variable 'cook_prediction' where it is not associated with a value

Мой models.py:

from django.db import models
class RecipeModel(models.Model):
    i_one = models.BigIntegerField(default=0)
    v_one = models.FloatField(default=0)

Мой forms.py:

from django import forms
from .models import RecipeModel 
class RecipeInputForm(forms.ModelForm):
    class Meta:
        model = RecipeModel
        exclude = []
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.fields['i_one'].initial = 0
            self.fields['v_one'].initial = 0

Мой views.py:

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from . import forms    

@login_required
def index(request):
    if request.method == 'POST':
        recipe_form = forms.RecipeInputForm(request.POST)
    else:
        recipe_form = forms.RecipeInputForm()
    print("Recipe form errors: ", recipe_form.errors)
    if recipe_form.is_valid():
        print("Recipe form errors: ", recipe_form.errors)
        cook_prediction = recipe_form.cleaned_data
    if not recipe_form.is_valid():
        print("Recipe form errors: ", recipe_form.errors)
        print("Recipe form is not valid!")

После выполнения кода, кроме вышеупомянутого сообщения об ошибке, я также получаю распечатку Recipe form is not valid! из последней строки views.py.

Как избавиться от этой ошибки и успешно получить переменную из формы на основе ModelForm?

Вы не должны пытаться валидировать форму, если метод запроса не POST. В данный момент вы делаете это безусловно. Попробуйте изменить код на следующий:

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from . import forms    

@login_required
def index(request):
    if request.method == 'POST':
        recipe_form = forms.RecipeInputForm(request.POST)
        if recipe_form.is_valid():
            print("Recipe form errors: ", recipe_form.errors)
            cook_prediction = recipe_form.cleaned_data
            # Any further processing of `cook_prediction` should happen here
            # as this variable is unbound outside this block
        else:
            print("Recipe form errors: ", recipe_form.errors)
            print("Recipe form is not valid!")
    else:
        recipe_form = forms.RecipeInputForm()
        # The following line also doesn't make sense as on GET won't have errors
        # print("Recipe form errors: ", recipe_form.errors)
Вернуться на верх