在 Django 视图中赋值之前引用的局部变量'X'



我正在与Django一起工作,并试图在一个页面上创建两个表单,我正在努力。

我想知道为什么在分配之前引用的本地变量'street_address'会出现错误';

VIEWS.PY - CheckoutView类

def post(self, *args, **kwargs):
form = AddressForm(self.request.POST or None)
form_2 = PaymentForm(self.request.POST or None)
# order, created = Order.objects.get_or_create(customer=customer, complete=False)
# order = Order.objects.get(user=self.request.user, ordered=False)
if all([form.is_valid(), form_2.is_valid()]):
street_address = form.cleaned_data.get('street_address')
city = form.cleaned_data.get('city')
postcode = form.cleaned_data.get('postcode')
country = form.cleaned_data.get('country')
state = form.cleaned_data.get('state')
shipping_method = form.cleaned_data.get('shipping_method')
card_num = form.cleaned_data.get('card_num')
cvc = form.cleaned_data.get('cvc')
exp_date = form.cleaned_data.get('exp_date')
address = Shipping(
user=self.request.user,
street_address=street_address,
city=city,
postcode=postcode,
country=country,
state=state,
shipping_method=shipping_method
)
card_details = Payment(
user=self.request.user,
card_num=card_num,
cvc=cvc,
exp_date=exp_date
)
address.save()
card_details.save()
return render(self.request,"Order_Management/checkout.html")'''

问题是您正在检查表单是否有效。如果是,则从它们中获取值并将其赋值给变量。

但是,构建ShippingPayment模型并保存它们的代码部分每次都执行,它不会在检查表单有效性的块内缩进。

结果是,如果任何一种形式是无效的,你的代码将尝试构建模型,无论如何,它将无法,因为你没有从形式分配变量。

所以你需要缩进所有的代码,所以它都在你的有效性检查。

if all([form.is_valid(), form_2.is_valid()]):
street_address = form.cleaned_data.get('street_address')
city = form.cleaned_data.get('city')
postcode = form.cleaned_data.get('postcode')
country = form.cleaned_data.get('country')
state = form.cleaned_data.get('state')
shipping_method = form.cleaned_data.get('shipping_method')
card_num = form.cleaned_data.get('card_num')
cvc = form.cleaned_data.get('cvc')
exp_date = form.cleaned_data.get('exp_date')
address = Shipping(
user=self.request.user,
street_address=street_address,
city=city,
postcode=postcode,
country=country,
state=state,
shipping_method=shipping_method
)
card_details = Payment(
user=self.request.user,
card_num=card_num,
cvc=cvc,
exp_date=exp_date
)
address.save()
card_details.save()
return render(self.request,"Order_Management/checkout.html")

相关内容

最新更新