2016-04-19 14 views
0

Ich versuche, eine app.Model.pyDjango mehrere verwandte Formen Datenverarbeitungsfehler

class serviceinvoice(models.Model): 
    user=models.ForeignKey(User,related_name='invoice')  
    invoice_number=models.PositiveIntegerField() 
    #invoice_no = models.CharField(max_length = 500, default = increment_invoice_number, null = True, blank = True) 
    invoice_date = models.DateField() 
    invoice_receivable=models.ForeignKey(Receivables,null=True) 
    total_amount=models.DecimalField(decimal_places=2,max_digits=20) 
    total_amountwithtax=models.DecimalField(decimal_places=2,max_digits=20) 

    def __str__(self): 
     return self.invoice_number 

class serviceinvoiceitems(models.Model): 
    user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='serviceinvoiceitems') 
    invoice_number=models.ForeignKey(serviceinvoice) 
    Product=models.CharField(max_length=1000,null=True) 
    UOM=models.CharField(max_length=100,null=True) 
    Quantity=models.FloatField(null=True) 
    Rate=models.FloatField(null=True) 
    Tax_rate=models.FloatField(null=True) 

    def __str__(self): 
     return self.invoice_number 

forms.py

class createinvoiceform(forms.ModelForm): 
    class Meta: 
     model=serviceinvoice 
     exclude=('user',) 
     widgets = { 
      'invoice_date': forms.DateInput(attrs={'class':'datepicker'}), 
     } 

class invoiceitemform(forms.ModelForm): 
    class Meta: 
     model=serviceinvoiceitems 
     exclude=('user','invoice_number',) 

views.py

zu machen
@login_required 
def createinvoice(request): 
    if request.method == 'POST': 
     inv_form=createinvoiceform(data=request.POST) 
     inv_item=invoiceitemform(data=request.POST) 
     if inv_form.is_valid() and inv_item.is_valid(): 
      new_form=inv_form.save(commit=False) 
      new_form.user=request.user 
      new_form.save() 
      new_invitem=inv_item.save(commit=False) 
      new_invitem.user=request.user 
      new_invitem.invoice_number=request.invoice_number 
      new_invitem.save() 
      return HttpResponse('Invoice created') 
    else: 
     inv_form=createinvoiceform() 
     inv_item=invoiceitemform() 
     inv_form.fields["invoice_receivable"].queryset=Receivables.objects.filter(user=request.user) 
    return render(request,'account/createinvoice.html',{'inv_form':inv_form,'inv_item':inv_item}) 

Formulare werden in der Vorlage angezeigt, aber nicht von der Ansicht verarbeitet.

Erste Fehler,

(1048, "Spalte 'invoice_number_id' kann nicht null sein").

Bitte führen auf:

  1. Wie kann ich diese Form verarbeiten, da zweite Form Fremdschlüssel ersten Formular verwendet wird.

  2. Gibt es eine Möglichkeit in der Vorlage, die zweite Form mehrmals anzuzeigen?

Antwort

0

Fabrikat Rechnungsnummer als nicht Pflichtfeld

models.py

invoice_number=models.ForeignKey(serviceinvoice, null=True, blank=True, 
           default=None) 
+0

Aber INVOICE_NUMBER erforderlich. Es ist ein Fremdschlüssel zwischen 2 Modellen. –