我嘗試使用lambda來根據另一個表中的值 中的值設置默認值。在Web2py中使用lambda作爲默認模型
這裏是我的模型:
db.define_table('trip_instance', timestamp, sos_table,
Field('trip_type_id', db.trip_type, label='Trip Type',
widget=trip_select_widget, requires = IS_IN_DB(db, 'trip_type.id', '%
(name)s'), represent=lambda id:db.trip_type(id)['name']),
Field('total_slots', 'integer', default=lambda r:
db.trip_type(r.trip_type_id)['total_slots']),
本地這將導致一個錯誤,指出:
TypeError: <lambda>() takes exactly 1 argument (0 given)
而且我的服務器上(的Linode)沒有錯誤,但是當我嘗試創建 一個新的旅行實例與sqlform總插槽字段是前 填充此:
<function <lambda> at 0x7f27684b7140>
我的lambda看起來幾乎和 工作正常的一樣,它代表trip_type_id字段,除了我使用字段的表而不是 。這是我做錯了什麼?
感謝您的回答。我嘗試了一個計算字段,並將其顯示在SQLForm中,但每當我在該表單字段中輸入一個值並提交時,它總是被計算字段lambda覆蓋,儘管它出現web2py書中說它不應該。我甚至在模型中嘗試了writable = true。任何想法如何讓這個工作?由於其他限制,我寧願在模型級別上執行此操作,而不是在可能的情況下執行表單級別。 – LennonR
如果在表單中包含total_slots,則在提交表單時,即使total_slots字段留空,計算函數也應該被忽略。因此,如果表單域保留爲空,則該字段在數據庫中最終應該爲空 - 它不應被計算函數覆蓋。 – Anthony