У меня есть вопрос о сохранении трех форм одновременно. Первые две формы сохраняют ОК без проблем, но третья форма должна запрашивать идентификатор из формы2, когда form2 сохраняется в базе данных. Не знаю, где проблема в этой процедуре и где я ошибаюсь.Django ORM сохраняет сразу несколько форм
models.py
class Product_service(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
selling_price = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
purchase_price = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
image = models.FileField(upload_to="/", blank=True, null=True)
product_code = models.CharField(max_length=255, blank=True, null=True)
product_code_supplier = models.CharField(max_length=255, blank=True, null=True)
product_code_buyer = models.CharField(max_length=255, blank=True, null=True)
min_unit_state = models.CharField(max_length=255, blank=True, null=True)
state = models.CharField(max_length=255, blank=True, null=True)
vat_id = models.ForeignKey('VatRate', related_name='vat_rate')
unit_id = models.ForeignKey('Units', related_name='unit_value')
category_id = models.ForeignKey('Category', related_name='product_services', blank=True, null=True)
def __str__(self):
return self.name
Эта модель представляет Form2.
class InvoiceProdService(models.Model):
id = models.AutoField(primary_key=True)
invoice_id = models.ForeignKey('OutgoingInvoice', related_name='outgoing_invoice', blank=True, null=True)
prod_serv_id = models.ForeignKey('Product_service', related_name='product_services', blank=True, null=True)
code = models.IntegerField(blank=True, null=True)
prod_serv_name = models.CharField(max_length=255,blank=True, null=True)
description = models.CharField(max_length=255,blank=True, null=True)
rate_name = models.CharField(max_length=255,blank=True, null=True)
units = models.CharField(max_length=255, blank=True, null=True)
price = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
vat = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
current_vat = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
price_no_vat = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
def __str__(self):
return self.id
Эта модель представляет форму3. Если два поля связаны с ForeignKey с формой2.
invoice_id = models.ForeignKey('OutgoingInvoice', related_name='outgoing_invoice', blank=True, null=True)
prod_serv_id = models.ForeignKey('Product_service', related_name='product_services', blank=True, null=True)
Когда я пытаюсь с админке я могу сохранить форму непосредственно в базу данных. И это работает очень хорошо.
views.pyВот логика в методе экономии:
if request.method == 'POST':
form1 = InsertNewCustomer(request.POST, prefix='form1')
form2 = Outdrew(request.POST, prefix='form2')
form5 = MultiplyInsertValues(request.POST, prefix='form5')
if (form1.is_valid() and form2.is_valid() and form5.is_valid()):
a, created = OrganizationInfo.objects.get_or_create(**form1.cleaned_data)
if created:
b = form2.save(commit=False)
b.user_id = user_pk
b.organization_id = org_id.id
b.customer_id = a
b.save()
c = form5.save(commit=False)
nesto = Product_service.objects.get(name= form5.cleaned_data['prod_serv_name'])
c.prod_serv = nesto.id
c.save()
return HttpResponseRedirect('/izlazni_racuni/')
else:
b = form2.save(commit=False)
organ_id = OrganizationInfo.objects.get(oib=form1.cleaned_data['oib'])
b.user_id = user_pk
b.organization_id = org_id.id
b.customer_id = organ_id.id
b.save()
c = form5.save(commit=False)
nesto = Product_service.objects.get(name= form5.cleaned_data['prod_serv_name'])
c.invoice_id = b.id
c.prod_serv_id = nesto.id
c.save()
return HttpResponseRedirect('/izlazni_racuni/')
else:
form1 = InsertNewCustomer(prefix='form1')
form2 = Outdrew(prefix='form2')
form5 = MultiplyInsertValues(prefix='form5')
После этого я получаю сообщение об ошибке: Невозможно присвоить значение "80": "InvoiceProdService.invoice_id" должно быть "OutgoingInvoice" пример.
И проблема на линии: c.invoice_id = b.id
Джанго версия: 1.7.7
Не знаю, где проблема по этому вопросу.
Thx для решения, @spectras – marin