我正在尝试为web2py建立股票数据数据库,例如,公司A持有2010年,2011年,2012年的股权数据......公司B持有2010年,2011年,2012年的股权数据...... 这就是我想出来的。
db.define_table(
'company',
Field('name'),
format = '%(name)s')
db.define_table(
'years',
Field('fiscal_year'),
format = '%(fiscal_year)s')
db.define_table(
'stock_data',
Field('company_id', db.company),
Field('years_id', db.years),
Field('equity', 'integer'),
format = '%(equity)s %(years_id)s -> %(company_id)s')
db.company.name.requires = IS_NOT_IN_DB(db, 'company.name')
db.years.fiscal_year.requires = IS_NOT_IN_DB(db, 'years.fiscal_year')
问题在于,我可以在同一年为一家公司重复多次不同的价值观。 我怎样才能"链接"一年到公司和那一年的股权价值。
答案 0 :(得分:1)
假设您希望company_id
和years_id
的组合是唯一的,您可以执行以下操作:
db.define_table(
'stock_data',
Field('company_id', db.company),
Field('years_id', db.years),
Field('equity', 'integer'),
format = '%(equity)s %(years_id)s -> %(company_id)s')
matching_company_id = db.stock_data.company_id == request.vars.company_id
unique_company_year = IS_NOT_IN_DB(db(matching_company_id), 'stock_data.years_id')
db.stock_data.years_id.requires = IS_IN_DB(db, 'years.id', db.years._format,
_and=unique_company_year)
在上文中,unique_company_year
确保提交的years_id
值在company_id
与提交的company_id
匹配的记录集中是唯一的(这可以保证{ {1}} / company_id
对是唯一的,同时仅在任一字段上允许非唯一值)。然后将此years_id
验证程序作为IS_NOT_IN_DB
参数传递给该字段的标准_and
验证程序。