簡體   English   中英

Django CreateView內聯表單集實例和queryset

[英]Django CreateView inline formset instance and queryset

因此,我有一種付款方式。 首次呈現頁面時,會有一個空白表格。 我正在使用ajax選擇客戶,然后返回該客戶所有未清發票的html字符串,並將其插入空白表格。

當提交表單以使未付發票表單集有效時,我需要將匹配的實例和queryset作為ajax生成的表單集傳遞給它。 我遇到的問題是將客戶實例傳遞給get_context_data()。

現在,我已經將客戶硬編碼為pk = 1,並且可以確認該表單集有效。 表單中還有一個隱藏的字段,其中包含用於客戶的值,但是我不確定如何將其傳遞給get_context_data()。

任何人都知道如何做到這一點?

class PaymentCreate(CreateView):
    template_name = 'payment_create.html'
    model = Pay_hdr
    success_url = reverse_lazy('payments')
    form_class = PaymentHeadForm

    def get_context_data(self, **kwargs):
        context = super(PaymentCreate, self).get_context_data(**kwargs)
        context['customers'] = Customer.objects.all().order_by('name')
        if self.request.POST:
            customer = Customer.objects.get(pk=1)  # need to replace this line
            queryset = Accounts_receivable.objects.filter(customer=customer).exclude(balance=0).order_by('-date_trans')
            context['user'] = self.request.user
            context['formset'] = ARLineFormset(self.request.POST, instance=customer, queryset=queryset)
        else:
            context['formset'] = ARLineFormset()
        return context

    def form_valid(self, form):
        context = self.get_context_data()
        user = context['user']
        formset = context['formset']
        if form.is_valid() and formset.is_valid():
            head = form.save(commit=False)
            invoices = formset.save(commit=False)
            head.created_by = user
            head.save()
            for invoice in invoices:
                if invoice.temp_amount > 0:
                    invoice.process_payment(head, invoice.temp_amount, user)
            return redirect(self.success_url)
        else:
            return render(self.request, self.template_name, self.get_context_data(form=form))

def ajax_payment_choose_customer(request):
    customer_id = request.GET.get('customer_id', None)
    customer = Customer.objects.get(pk=customer_id)
    outstanding = Accounts_receivable.objects.filter(customer=customer).exclude(balance=0).order_by('-date_trans')
    if request.is_ajax():
        form = PaymentHeadForm()
        formset = ARLineFormset(instance=customer, queryset=outstanding)
        context = {
            'customer': customer,
            'form': form,
            'outstanding': outstanding,
            'formset': formset
        }
        html = render_to_string('payment_insert_forms.html', context)
        return HttpResponse(html)

替換customer = Customer.objects.get(pk=1)

customer = Customer.objects.get(pk=self.request.POST.get('customer'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM