如何在web2py中生成/打印账单?

时间:2016-04-03 12:07:48

标签: web2py foreign-key-relationship

我正在web2py中做一个示例应用。 其中涉及客户,产品和账单,如下所示

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'))

当我尝试在'比尔'中添加客户名称时它显示错误

enter image description here

  

我想生成/打印包含客户详细信息,产品的帐单   信息(如产品名称,产品类型,数量,价格)和   所有产品的总价格。

帮助我。

注意: - 此处Bill包含产品的动态值。这意味着比尔可以拥有1/2/3 /.../ n个产品。

1 个答案:

答案 0 :(得分:3)

在web2py中,引用字段存储引用表的主键,它是引用表的整数“id”字段。因此,将“Customer_Name”字段定义为引用字段是没有意义的(可能这样的字段将存储名称,但引用字段存储整数ID)。 “Customer_ID”字段已经是对“客户”表的引用 - 您不需要对“客户”表的其他引用。因此,您只需删除“Customer_Name”字段。

注意,您可以在“客户”表中添加“格式”属性:

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

现在,只要您定义引用“Customer”表的字段,例如:

    Field('Customer_ID', db.Customer)

参考字段将获得(a)显示客户名称的默认表单窗口小部件(即使关联的“客户”记录ID将插入数据库中),以及(b)显示该客户端名称的默认“表示”属性客户名称而不是只读表单和网格中的客户ID。

如果您需要结合帐单或一组帐单访问客户详细信息,可以通过join进行操作。您还可以利用web2py的内置recursive selects功能。