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)