Я пытаюсь сохранить некоторые данные через форму и пытаюсь использовать FormSet
. Данные, которые нужно сохранить, представляют собой счет-фактуру, которая содержит Product
и Details
.
. Мне удалось отобразить все в одном месте (это было непросто), а также сохранить счет-фактуру и детали в БД. По какой-то причине в таблице Detail
сохраняется идентификатор продукта, но не идентификатор счета-фактуры. Это мое models.py
:
class Detail(models.Model):
invoice = models.ForeignKey(Invoice, null=True, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
subtotal = models.DecimalField(max_digits=9 , null=True, decimal_places=2)
class Invoice(models.Model):
date = models.DateField(default=datetime.date.today)
number = models.CharField(max_length=10, default='0000000000')
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
products = models.ManyToManyField(Product, null=True, blank=True)
total = models.DecimalField(max_digits=9 , null=True, decimal_places=2)
И это мое views.py
:
def invoice_new(request):
DetailFormSet = formset_factory(DetailForm, extra=2)
if request.method == "POST":
invoice_form = InvoiceForm(request.POST)
detail_formset = DetailFormSet(request.POST)
if invoice_form.is_valid() and detail_formset.is_valid():
invoice = invoice_form.save(commit=False)
invoice.save()
for details in detail_formset:
details.save()
return redirect('invoice_detail', pk=invoice.pk)
else:
return redirect('invoice_error')
else:
invoice_form = InvoiceForm()
detail_formset=formset_factory(DetailForm, extra=2)
return render(request, 'invoice/invoice_edit.html', {'invoice_form': invoice_form, 'detail_form': detail_formset} )
Я пытался добавить это к телу for
l oop:
details.invoice_id = invoice.pk
invoice.id
печатает ОК, но не сохраняет номер в БД. Я не вижу, как он получает идентификатор продукта просто отлично, но не счета-фактуры.
Я добавляю forms.py
class InvoiceForm(forms.ModelForm):
class Meta:
model = Invoice
fields = ['date','number','supplier']
total = forms.DecimalField(disabled=True)
class DetailForm(forms.ModelForm):
class Meta:
model = Detail
fields = ['product','quantity']