Hola a todos,
Espero me puedan ayudar a resolver esta duda,
Tengo tres clases, Factura, Detalle y Concepto lo que debo hacer es filtrar mediante un request.POST los conceptos del detalle que pertenecen al área.
Código Python:
Ver originalclass Factura(models.Model):
factura = models.CharField()
class Detalle(models.Model):
concepto = models.ForeignKey("Concepto")
factura = models.ForeignKey("Factura")
cantidad = models.FloatField()
class Concepto(models.Model):
nombre = models.CharField()
area = models.ForeignKey()
class Area(models.Model):
nombre = models.CharField
# views.py
class CreateInvoiceProcedureView(CreateView):
template_name = 'invoice/invoice_form.html'
model = Factura
def post(self, request, *args, **kwargs):
self.object = None
form = InvoiceForm(request=request)
invoice_detail_form = InvoiceDetailFormSet(request.POST, instance=Factura,
request=request)
return self.render_to_response(
self.get_context_data(
form=form,
invoice_detail_form=invoice_detail_form
)
)
class BaseFormSetInvoice(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
# call first to retrieve kwargs values, when the class is instantiated
self.request = kwargs.pop("request")
super(BaseFormSetInvoice, self).__init__(*args, **kwargs)
# self.fields['concepto'] # envia error de que no existe fields
self.queryset.concepto = Detalle.objects.filter(
Q(concepto__area__name=self.request.POST.get('area')) | Q(concepto__area__name='default')
) # devuelve toda la lista de conceptos, no estan siendo filtrados
# self.queryset.concepto = Concepto.objects.filter(
# Q(area__name=self.request.POST.get('area')) | Q(area__name='default')
# ) # devuelve toda la lista de concetos, no estan siendo filtrados
class InvoiceForm(forms.ModelForm):
class Meta:
model = Factura
fields = ('factura',)
class InvoiceDetailForm(forms.ModelForm):
class Meta:
model = Detalle
fields = ('concepto',)
InvoiceDetailFormSet = inlineformset_factory(Factura, Detalle,
formset=BaseFormSetInvoice,
form=InvoiceDetailForm,
extra=1)
He utilizado inlineformset_factory para trabajar con esto, pero no puedo sobreescribir el campo concepto, para poder filtrar, es posible hacerlo, estoy usando la herencia de BaseInlineFormSet por que leí que desde ella puedo hacerlo, sin embargo sólo he obtenido los siguientes errores
Código:
django.core.exceptions.ValidationError: ['ManagementForm data is missing or has been tampered with']
'InvoiceDetailFormFormSet' object has no attribute 'fields'