# -*- coding: utf-8 -*- from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_protect from django.forms.models import model_to_dict from ..models import Invoice, InvoiceItem from ..forms import InvoiceForm, InvoiceItemForm class AddByInvoiceMethodMixin(object): """Mixin: добавляет метод add_by_invoice.""" @method_decorator(csrf_protect) def add_by_invoice(self, *args, **kwargs): """Добавить документ по Счёту.""" invoice_id = (kwargs['invoice_id']) invoice = get_object_or_404(Invoice, pk=invoice_id, user=self.request.user) invoice_items = InvoiceItem.objects.filter(parent=invoice).select_related() kwargs['initial'] = model_to_dict( invoice, fields=getattr(InvoiceForm.Meta, 'fields', None), exclude=getattr(InvoiceItemForm.Meta, 'exclude', None) ) kwargs['initial'].update(self.init_form()) kwargs['initial']['invoice'] = invoice if invoice_items: kwargs['initial_items'] = [] for item in invoice_items: kwargs['initial_items'].append( model_to_dict( item, fields=getattr(InvoiceItemForm.Meta, 'fields', None), exclude=getattr(InvoiceItemForm.Meta, 'exclude', None) )) return self.add(self.request, *args, **kwargs)