在赋值</variablename>之前引用的UnboundLocalError局部变量<variablename>

时间:2012-01-27 04:06:28

标签: python django

当我尝试从表单捕获POST数据时遇到错误。很奇怪,因为相同的算法适用于另一个django app模型。

模特:

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)

另一个工作(供应商)模型的工作views.py函数在这里:

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确实传递了一些变量。请帮助我,我无法弄清楚为什么它适用于供应商,而不是项目。

P / S:对不起缩进。

1 个答案:

答案 0 :(得分:3)

问题在于:

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

你没有分配,你正在比较。