UnboundLocalError:局部变量<variablename>在赋值前被引用

0 投票
1 回答
2214 浏览
提问于 2025-04-17 11:12

我在尝试从一个表单获取POST数据时遇到了错误。这很奇怪,因为同样的算法在另一个django应用的模型中却能正常工作。

模型如下:

class Item(models.Model):
    code = models.CharField(max_length=200, unique=True)
    barcode = models.CharField(max_length=300)
    desc = models.CharField('Description',max_length=500)
    reg_date = models.DateField('registered date')
    registrar = models.CharField(max_length=100)
    def __unicode__(self):
       return self.code + ' : ' + self.desc

class ItemInfo(models.Model):
    model = models.ForeignKey(Item)
    supplier = models.ForeignKey(Supplier)
    stock_on_hand = models.IntegerField()
    stock_on_order = models.IntegerField()
    cost = models.IntegerField()
    price = models.IntegerField()
    unit = models.CharField(max_length=100)
    lead_time = models.IntegerField()

    def __unicode__(self):
        return Item.code + ' : ' + supplier

class ItemForm(ModelForm):
     class Meta:
         model = Item

class ItemInfoForm(ModelForm):
     class Meta:
        model = ItemInfo
        exclude = ('model')

而这个不工作的(Item)视图函数在views.py中的样子是这样的:

def register(request):
    csrf_context = RequestContext(request)
    current_user = User
    if request.user.is_authenticated():
        if request.POST:
            item = Item()
            item_info = ItemInfo()

            header_form == ItemForm(data=request.POST,instance=item)
            details_form == ItemInfoForm(data=request.POST, instance=item_info)

            if header_form.is_valid():
                 header = header_form.save()

                if details_form.is_valid():
                    details = details_form.save(commit=False)
                    details.supplier = header
                    details.save()
                    return HttpResponseRedirect('/item/')
               else:
                    return render_to_response('error/denied_data_entry.html')
         else:
             header_form = ItemForm()
             details_form = ItemInfoForm()
         return render_to_response('item/register.html',{'header_form' : header_form, 'details_form' : details_form}, csrf_context)
    else:
         return render_to_response('error/requires_login.html', csrf_context)

另一个正常工作的(Supplier)模型的视图函数在这里:

def register(request):
    csrf_context = RequestContext(request)
    current_user = User    
    if request.user.is_authenticated():
        if request.POST:
             supplier = Supplier()
             supplier_info = SupplierInfo()

             header_form = SupplierForm(data=request.POST, instance=supplier)
             details_form = SupplierInfoForm(data=request.POST, instance=supplier_info)

             if header_form.is_valid():
                 header = header_form.save()

                 if details_form.is_valid():
                     details = details_form.save(commit=False)
                     details.model = header
                     details.save()
                     return HttpResponseRedirect('/supplier/')
                 else:
                     return render_to_response('error/denied_data_entry.html')
             else:
                 return render_to_response('error/denied_data_entry.html')
         else:  
             header_form = SupplierForm()
             details_form = SupplierInfoForm()
             return render_to_response('supplier/register.html', {'header_form' : header_form, 'details_form' : details_form}, csrf_context)
    else:
        return render_to_response('error/requires_login.html', csrf_context)  

错误追踪页面显示POST确实传递了一些变量。请帮帮我,我搞不懂为什么在Supplier上能工作,而在Item上却不行。

附言:抱歉代码缩进有点乱。

1 个回答

3

问题出在这里:

# ...
header_form == ItemForm(data=request.POST,instance=item)
details_form == ItemInfoForm(data=request.POST, instance=item_info)

你不是在给某个东西赋值,而是在进行比较。

撰写回答