django - 每当我单击提交按钮时,我都会在分配之前得到 unboundLocalError 和局部变量“c”引用
问题描述
我为产品表创建了一个表格。我在下拉框中包含了来自多个表的值。每当我完成填写表格并单击提交时,它都会向我抛出 UnboundLocalError 错误。它还说在赋值之前引用了局部变量'c'。我不明白我犯了什么错误,而且我是 django 环境的新手。
model.py
class Products(models.Model):
pname=models.CharField(max_length=120)
pcode=models.CharField(max_length=120)
category=models.CharField(max_length=120)
brand=models.CharField(max_length=120)
supplier=models.CharField(max_length=120)
description=models.CharField(max_length=120)
class Meta:
db_table="products"
forms.py:
class ProductForm(forms.ModelForm):
pname=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
pcode=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
category=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
brand=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
supplier=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
description=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
class Meta:
model=Products
fields="__all__"
views.py:
def addproduct(request):
if request.method == "POST":
form = ProductForm(request.POST)
if form.is_valid():
try:
form.save()
return redirect(show_products)
except Exception as e:
raise e
else:
form = ProductForm()
c=Category.objects.all()
b=Brand.objects.all()
return render(request,'addproduct.html',{'form':form,'c':c,'b':b})
addproduct.html:
<form method="POST" action="addproduct">
{% csrf_token %}
<div class="form-group">
<label>Product Code:</label>
{{form.pcode}}
</div>
<div class="form-group">
<label>Category:</label>
<select class="form-control" name='category' required='' id='id_category' >
{% for cat in c %}
<option value='{{cat.id}}'> {{cat.cname}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label>Brand:</label>
<select class="form-control" name='brand' required='' id='id_brand' >
{% for bra in b %}
<option value='{{bra.id}}'> {{bra.bname}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label>Supplier:</label>
{{form.supplier}}
</div>
<div class="form-group">
<label>Product Name:</label>
{{form.supplier}}
</div>
<center> <button class="btn btn-outline-success" type="submit">Submit</button></center>
</form>
解决方案
当您提交表单时,请求是 POST 并且b
,c
变量不能赋值。这就是错误抛出的原因。
尝试这个
def addproduct(request):
if request.method == "POST":
form = ProductForm(request.POST)
if form.is_valid():
try:
form.save()
return redirect('show_products')
except Exception as e:
raise e
else:
form = ProductForm()
c=Category.objects.all()
b=Brand.objects.all()
return render(request,'addproduct.html',{'form':form,'c':c,'b':b})
将其urls.py
更改为path('show_products',views.show_products)
path('show_products',views.show_products, name='show_products')
推荐阅读
- python - 删除 NA_character_
- python - 随机数据块中的随机行有多随机?
- python - 如何使用 BeautifulSoup 仅解析引号?
- python - 无法使用 BeautifulSoup 解析此 HTML 页面
- c - 阅读文本字符串时句子计数不起作用
- ios - Swift 5 - 在视图控制器按钮和导航控制器之间切换
- authentication - 在基于令牌的身份验证中,谁应该创建 JWT、应用程序开发人员或身份验证服务器?
- python - 有没有办法编写一个单行 if 语句,涉及基于特定值 == False 对所有项目的 for 语句?
- java - 为什么在新线程创建时使用等待/通知?
- javascript - 如何在闭包中参数化 Firebase API 调用?