2016-04-03 15 views
0

Ich mache eine Beispiel-App in web2py. Welche Kunde, Produkt und Bill, wie unten gezeigtWie man Rechnung in web2py erzeugt/druckt?

db=DAL('sqlite://Navale.db') 
db = DAL(lazy_tables=True) 

STATE= ('Andaman and Nicobar Islands','Andhra Pradesh','Arunachal Pradesh','Assam','Bihar','Chandigarh',' Chhattisgarh','Dadra and Nagar Haveli','Daman and Diu','Delhi','Goa','Gujrat','Haryana','Himachal Pradesh','Jammu and Kashmir','Jharkhand',' Karnataka','Kerala','Lakshadeep','Madhya Pradesh','Maharashtra','Manipur','Meghalaya','Mizoram','Nagaland','Odisha','Puducherry','Punjab','Rajasthan','Sikkim','Tamil Nadu','Telangana','Tripuru',' Uttar Pradesh','Uttarakhand','West Bengal') 

db.define_table('Customer', 
       Field('Customer_ID', type='id', requires=IS_NOT_EMPTY()), 
       Field('Customer_Type', requires=IS_IN_SET(['Retail','Local'])), 
       Field('Name', type='string', requires=IS_NOT_EMPTY()), 
       Field('Contact_Number', type='integer', requires=IS_NOT_EMPTY()), 
       Field('Address', type='string'), 
       Field('City', type='string', requires=IS_NOT_EMPTY()), 
       Field('State', requires=IS_IN_SET(STATE)), 
       Field('PIN', type='integer', requires=IS_NOT_EMPTY()) 
       ) 
db.define_table('Product', 
       Field('Product_ID', requires=IS_NOT_EMPTY()), 
       Field('Product_Name'), 
       Field('Category', requires=IS_IN_SET(['Gents', 'Ladies', 'Kids'])), 
       Field('Rate', type='double')) 
db.define_table ('Bill', 
       Field('Bill_ID', type='id', requires=IS_NOT_EMPTY()), 
       Field('Date', type='datetime'), 
       Field('Customer_ID', db.Customer), 
       Field('Customer_Name', db.Customer), 
       Field('Total_cost', type='double')) 

Wenn ich versuche hinzufügen Kundennamen in 'Bill' es zeigt Fehler

enter image description here

Ich möchte generieren/print beinhaltet eine Rechnung, die Kundendetails, Produkt Informationen (wie Produktname, Produkttyp, Menge, Preis) und Gesamtpreis aller Produkte hat.

Hilf mir.

Hinweis: - Hier besteht Bill aus dynamischen Werten von Produkten. Das bedeutet, Bill kann 1/2/3 /.../ n Anzahl der Produkte haben.

Antwort

3

In Web2py speichert ein Referenzfeld den Primärschlüssel der referenzierten Tabelle, der das Ganzzahl- "ID" -Feld der referenzierten Tabelle ist. Daher ist es nicht sinnvoll, ein Feld "Customer_Name" als Referenzfeld zu definieren (vermutlich würde ein solches Feld einen Namen speichern, aber Referenzfelder speichern ganzzahlige IDs). Das Feld "Customer_ID" ist bereits ein Verweis auf die Tabelle "Customer" - Sie benötigen keinen zusätzlichen Verweis auf die Tabelle "Customer". Sie sollten also einfach das Feld "Kundenname" löschen.

Hinweis, können Sie ein „Format“ -Attribut auf die „Kunden“ Tabelle hinzufügen:

db.define_table('Customer', ..., format='%(name)s') 

Nun wird jedes Mal, wenn Sie definieren ein Feld, das die „Kunden“ Tabelle verweist, wie zB:

Field('Customer_ID', db.Customer) 

Das Referenzfeld erhält (a) ein Standardformular-Widget, das Kundennamen anzeigt (obwohl die zugehörigen "Kunden" -Datensatz-IDs in die Datenbank eingefügt werden) und (b) ein Standardattribut "Represent" der Kundenname und nicht die Kunden-ID in schreibgeschützten Formularen und im Grid.

Wenn Sie in Verbindung mit einer Rechnung oder einem Satz Rechnungen auf Kundendaten zugreifen müssen, können Sie dies über eine join tun. Sie können auch die integrierte Funktion recursive selects von web2py nutzen.

+0

Wie Kundeninformationen von Customer_ID in Rechnung ableiten? –

+0

Siehe bearbeitete Antwort. Sie können eine Join- oder rekursive Auswahl verwenden. – Anthony