2016-04-20 6 views
1

gespeichert Dies ist mein django Ansichten Code-Schnipsel:Fehler beim Speichern einer Instanz des Django-Modells. Aber das Snippet funktioniert, wenn nicht

if (calltype == 'save'): 
     bill_data = json.loads(request.POST.get('bill_details')) 
     Invoice=salesInvoice() 
     customerkey = request.POST.get('customer') 
     Invoice.customer_key = Customer.object.get(key__iexact=customerkey) 
     Invoice.total = request.POST.get('total') 
     Invoice.grand_discount = request.POST.get('grand_discount') 
     Invoice.amount_paid = request.POST.get('amount_paid') 
     #Invoice.save() 

     #saving the salesLineItem and linking them with foreign key to invoice 
     for data in bill_data: 
      LineItem = salesLineItem() 
      #LineItem.invoice_no = salesInvoice 
      itemcode=data['itemCode'] 
      LineItem.name = Product.object.get(key__iexact=itemcode).name 
      LineItem.unit = Product.object.get(key__iexact=itemcode).unit 
      LineItem.batch = Product.object.get(key__iexact=itemcode).batch 
      LineItem.discount1 = Product.object.get(key__iexact=itemcode).discount1 
      LineItem.discount2 = Product.object.get(key__iexact=itemcode).discount2 
      LineItem.quantity = int(data['itemQuantity']) 
      LineItem.free = int(data['itemFree']) 
      LineItem.mrp = Product.object.get(key__iexact=itemcode).mrp 
      LineItem.selling_price = Product.object.get(key__iexact=itemcode).selling_price 
      LineItem.vat_type = Product.object.get(key__iexact=itemcode).vat_type 
      LineItem.vat_percent = Product.object.get(key__iexact=itemcode).vat_percent 
      #LineItem.save() 
     #this part is just for checking 
     response_data['name'] = Product.object.get(key__iexact=itemcode).name 

Sie beachten Sie, dass ich die Zeilen auf Kommentar verwendet, um die Rechnung und lineitem zu speichern. Sobald ich diese Zeilen un-Kommentar, der Fehler, den ich bekommen ist:

name 'Invoice' is not defined 

ich auch die Methode des django Modells speichern overrode (für das salesInvoice Modell). Es folgt seinen Code (in django Modelle Datei) und in der Kommentarzeile habe ich eine kleine Erklärung, was das bedeutet:

#the save method is overriden to give unique invoice ids, slug and customer_name 
def save(self, *args, **kwargs): 
    today = dt.date.today() 
    today_string = today.strftime('%y%m%d') 
    next_invoice_number = '01' 
    last_invoice = Invoice.objects.filter(invoice_id__startswith=today_string).order_by('invoice_id').last() 
    if last_invoice: 
     last_invoice_number = int(last_invoice.invoice_id[6:]) 
     next_invoice_number = '{0:03d}'.format(last_invoice_number + 1) 
    self.invoice_id = today_string + next_invoice_number 
    if not self.id: 
     self.slug=slugify(self.invoice_id) 
     customer_name = Customer.object.get(key__iexact=customer_key).name 
     address = Customer.object.get(key__iexact=customer_key).address 
    super(Invoice, self).save(*args, **kwargs) 

Ich verstehe nicht, wo der Fehler ist. Jede Hilfe wird geschätzt.

EDIT 1 - Hinzufügen der Zurückverfolgungs

Traceback: 
File "C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\Ganguly PC\Desktop\DjangoStudy\billinv\billbrain\views.py" in salesinvoice 
    173.   Invoice.save() 
File "C:\Users\Ganguly PC\Desktop\DjangoStudy\billinv\billbrain\models.py" in save 
    189.  last_invoice =   Invoice.objects.filter(invoice_id__startswith=today_string).order_by('invoice_id').last() 

Exception Type: NameError at /master/salesinvoice/ 
Exception Value: name 'Invoice' is not defined 
Request information: 
GET: No GET data 

POST: 
amount_paid = '0.00' 
customer = 'fr' 
csrfmiddlewaretoken = 'xxxxxxxxxxxxxxxxxxxxx' 
bill_details = '[{"itemCode":"rev","itemQuantity":"5","itemFree":"0"}]' 
grand_discount = '0.00' 
total = '435.00' 
calltype = 'save' 
+0

Sie müssen lernen, wie man den StackTrace liest. Können Sie Ihre Frage bearbeiten, um den vollständigen Stacktrace zu posten? –

+0

Gut Shang, sicher. Ich bearbeite meine Frage mit dem Stacktrace. Aber heißt das nicht Traceback in HTML-Python (Django) & Stacktrace in Java/C ?? – Sayantan

+0

Ich könnte falsch in der Terminologie sein, danke für die Korrektur. Aber ich bin mehr daran interessiert, Menschen bei ihrem Problem zu helfen. –

Antwort

1

Es ist in Ihrem Traceback offensichtlich ist. Linie 173 ruft Invoice.save() dann geht es an die save() Methode übersteuert. Dann Linie 189 auftaucht und sagt Ihnen, den nächsten Ort, wo der Fehler auftritt: Sie taten:

last_invoice = Invoice.objects.filter(invoice_id__startswith=today_string).order_by('invoice_id').last() 

Aber Invoice ist nicht definiert. Es ist eher eine Python-Frage als eine Django-Frage. Sie müssen den Klassennamen zuerst definieren und dann verwenden. In Ansichten haben Sie import Invoice, aber hier können Sie nicht, aber Sie könnten type(self) verwenden, um auf die Instanz verweisen. Also:

last_invoice = type(self).objects.filter(invoice_id__startswith=today_string).order_by('invoice_id').last() 
+0

Ich schlage vor, dass Sie einige Python-Grundlagen lernen, bevor Sie in den Django springen, es wird Ihnen viel Zeit ersparen, diese grundlegenden Fragen in stackoverflow zu stellen: http://stackoverflow.com/questions/14804084/python-nameerrorn-name-is-not- definiert –

+0

Vielen Dank Shang !! Nun, das war ein sehr dummer Fehler! Sicherlich lerne ich Python nebenher (ich ging durch Python 101 & 102), aber Sie sehen, ich bin ein Nicht-Tech-Typ Planung für ein Startup und ich habe nicht viel Zeit :(. – Sayantan

Verwandte Themen