0

我正在使用 web2py 框架开发一个数据库项目,其中我需要编写一个查询来查找通过将数量和 unit_price 相乘获得的总账单金额。

表:

db.define_table('item',
Field('name', notnull = True,unique=True),
Field('price'),
format = '%(name)s')

db.define_table('customer',
Field('item_name', 'reference item'),
Field('item_price','reference item' ),
Field('name', notnull = True),
Field('email',requires = IS_EMAIL(error_message='invalid email!'),unique='True'),
Field('adress',requires=IS_NOT_EMPTY()),
Field('city'),
Field('quantity'),
Field('state',default='KARNATAKA'),
Field('contact_number'),
Field('Total_price',
compute=lambda r: r['quantity'] * r['item_price']),
format='%(name)s')
db.item.name.requires = IS_NOT_IN_DB(db, db.item.name)
db.customer.item_name.requires = IS_IN_DB(db, db.item.id, '%(name)s')
db.item.price.requires = IS_NOT_IN_DB(db, db.item.price)
db.customer.item_price.requires = IS_IN_DB(db, db.item.id, '%(price)s')`

输出:

customer.id customer.item_name  customer.item_price customer.name   customer.email  customer.adress customer.city   customer.quantity   
customer.state  customer.contact_number customer.Total_price:

Gold Winner Palm    Reshma  reshmagunda@g...    Near Bus stand  Mudalgi 2   KARNATAKA   7423089630  2222

如果我将此查询用于单表计算,它可以正常工作,但对于外键链接表,我会得到垃圾值......

价格字段在项目中;对于上面的查询,65/-它是客户表的外键,数量是2。预期的输出是130,但生成的查询输出是2222

我需要进行哪些修改才能获得预期的输出?

4

1 回答 1

2

引用字段仅存储被引用记录的记录 ID——它们不存储来自被引用记录的实际字段值。因此,以下字段:

Field('item_price', 'reference item')

不存储项目表中的价格值——它只是存储项目表中特定项目的记录 ID。要获取商品价格本身,您需要查询商品表(这可以通过连接或单独的查询来完成)。

这意味着 item_name 和 item_price 字段是多余的——您只需要一个引用 item 表的字段,因此将这两个字段替换为以下内容:

Field('item', 'reference item')

然后可以将计算域更改为:

Field('Total_price', compute=lambda r: r.quantity * db.item(r.item).price)

r.item是关联项目的记录 ID,因此db.item(r.item)获取该记录,db.item(r.item).price因此是该记录中价格字段的值。

另外,请注意默认字段类型是“字符串”,这是您的价格字段的类型,因为您没有明确指定类型。您可能希望将它们指定为十进制字段。

于 2016-04-19T17:40:50.707 回答