Локальная переменная UnboundLocalError <variablename>ссылка перед присваиванием - PullRequest
0 голосов
/ 27 января 2012

Я столкнулся с ошибкой при попытке получить данные 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')

И функция views.py для нерабочего (Item) выглядит так:*

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 Ответ

3 голосов
/ 27 января 2012

Проблема здесь:

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

Вы не присваиваете, вы сравниваете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...