Django: UnboundLocalError: локальная переменная 'qs', на которую ссылаются до назначения - PullRequest
0 голосов
/ 11 октября 2018

Это мой взгляд:

  @login_required
  def ledger1_detail_view(request, pk1, pk2):
       company_details = get_object_or_404(company, pk=pk1)
       ledger1_details = get_object_or_404(ledger1, pk=pk2)

       form_class = DateRangeForm

        if request.method == 'POST':
             form = form_class(request.POST or None)
             if form.is_valid():
                 start_date = request.POST.get('start_date')
                  end_date   = request.POST.get('end_date')
                  qs    : journal.objects.filter(Q(User=request.user) | Q(Date__range=(form.cleaned_data['start_date'], form.cleaned_data['end_date'])))

                  return HttpResponseRedirect(ledger1_details.get_absolute_url())
       else:
            form = DateRangeForm()


      context = {

          'company_details' : company_details,
          'ledger1_details' : ledger1_details,
          'journal_list'    : qs,

      }

      return render(request, 'accounting_double_entry/ledger1_details.html', context)

Это мой DaterangeForm:

  class DateRangeForm(forms.Form):
       start_date = forms.DateField(widget=DateInput())
       end_date   = forms.DateField(widget=DateInput())

Это моя модель журнала:

  class journal(models.Model):
      Date = models.DateField()
      By = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Debitledgers')
      To = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Creditledgers')
      Debit = models.DecimalField(max_digits=10,decimal_places=2)
      Credit = models.DecimalField(max_digits=10,decimal_places=2)

Я хочу отфильтроватьобъекты журнала в ledger1_detail_view для определенного диапазона дат ... Итак, я создал форму с именем «Daterangeform», которая может фильтровать объекты журнала, где «Date» объектов журнала находится между «start_date» и «end_date» Daterangeform, которыебудет предоставлен пользователем в соответствии с его выбором ...

Я сделал некоторую проверку формы в моем "ledger1_detail_view", как вы можете видеть ... Но получаю эту ошибку "UnboundLocalError: локальная переменная" qs "ссылаетсяперед заданием "

Может кто-нибудь помочь мне в этом?

Спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Эта ошибка связана с тем, что если у вас нет request.method == 'POST', то в контекстном словаре нет определения qs.

Определите свой контекст выше всех условий, и в условиях добавьте элементы в контекстсловарь вот так -

@login_required
  def ledger1_detail_view(request, pk1, pk2):
       company_details = get_object_or_404(company, pk=pk1)
       ledger1_details = get_object_or_404(ledger1, pk=pk2)
       context = {
          'company_details' : company_details,
          'ledger1_details' : ledger1_details,
      }
       form_class = DateRangeForm

        if request.method == 'POST':
             form = form_class(request.POST or None)
             if form.is_valid():
                 start_date = request.POST.get('start_date')
                  end_date   = request.POST.get('end_date')
                  qs  = journal.objects.filter(Q(User=request.user) | Q(Date__range=(form.cleaned_data['start_date'], form.cleaned_data['end_date'])))
                  context['journal_list'] = qs
                  return HttpResponseRedirect(ledger1_details.get_absolute_url())
        else:
             form = DateRangeForm()



      return render(request, 'accounting_double_entry/ledger1_details.html', context)

Это самый удобный способ избежать UnboundLocalError.

...