首页 > 解决方案 > 每当我单击提交按钮时,我都会在分配之前得到 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>

标签: djangodjango-modelsdjango-formsdjango-templatesdjango-views

解决方案


当您提交表单时,请求是 POST 并且bc变量不能赋值。这就是错误抛出的原因。

尝试这个

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')

推荐阅读