在定义之前在 web2py 中引用 table
Referencing a table in web2py before defining it
我的代码如下,我试图将部门分配给员工并在部门中创建经理 table
db = DAL(lazy_tables=True)
db.define_table('employee',
Field('fullname','string',label='Name'),
Field('email','string'),
Field('phone','string'),
Field('kids', 'string'),
Field('phone', 'string'),
#Field('date','datetime'),
Field('dob', 'datetime', label='Date'),
Field('department', 'reference department',
requires=IS_IN_DB(db, db.department.id, '%(department_name)s')),
auth.signature,
format='%(fullname)s'
)
db = DAL(lazy_tables=True)
db.define_table('department',
Field('department_name', 'string', label='Department Name'),
# Field('department_name', 'string', label='Department Name'),
Field('manager', 'reference employee', required='true',
requires=IS_IN_DB(db, db.employee.id, '%(fullname)s')),
auth.signature,
format='%(department_name)s'
)
Field('department', 'reference department',
requires=IS_IN_DB(db, db.department.id, '%(department_name)s')),
在上面的行中,您引用了 db.department.id
,但是 department
table 尚未定义,因此 db
对象还没有 department
属性。
您应该能够使用以下替代语法:
IS_IN_DB(db, 'department.id', '%(department_name)s')
或者,您可以在定义 department
table 之后定义 requires
属性:
db.employee.department.requires = IS_IN_DB(db, db.department.id, '%(department_name)s')
如果删除第二个 db = DAL(lazy_tables=True)
,应该没问题。
您遇到的问题是,在第一个 table 定义(员工)之后,您实际上用 declaring/instantiating 覆盖了第一个数据库对象。
这为您提供了一个新的数据库对象(未定义 tables),您在其中定义了一个 table(部门),该 table(部门)引用了另一个不再存在。
我的代码如下,我试图将部门分配给员工并在部门中创建经理 table
db = DAL(lazy_tables=True)
db.define_table('employee',
Field('fullname','string',label='Name'),
Field('email','string'),
Field('phone','string'),
Field('kids', 'string'),
Field('phone', 'string'),
#Field('date','datetime'),
Field('dob', 'datetime', label='Date'),
Field('department', 'reference department',
requires=IS_IN_DB(db, db.department.id, '%(department_name)s')),
auth.signature,
format='%(fullname)s'
)
db = DAL(lazy_tables=True)
db.define_table('department',
Field('department_name', 'string', label='Department Name'),
# Field('department_name', 'string', label='Department Name'),
Field('manager', 'reference employee', required='true',
requires=IS_IN_DB(db, db.employee.id, '%(fullname)s')),
auth.signature,
format='%(department_name)s'
)
Field('department', 'reference department',
requires=IS_IN_DB(db, db.department.id, '%(department_name)s')),
在上面的行中,您引用了 db.department.id
,但是 department
table 尚未定义,因此 db
对象还没有 department
属性。
您应该能够使用以下替代语法:
IS_IN_DB(db, 'department.id', '%(department_name)s')
或者,您可以在定义 department
table 之后定义 requires
属性:
db.employee.department.requires = IS_IN_DB(db, db.department.id, '%(department_name)s')
如果删除第二个 db = DAL(lazy_tables=True)
,应该没问题。
您遇到的问题是,在第一个 table 定义(员工)之后,您实际上用 declaring/instantiating 覆盖了第一个数据库对象。
这为您提供了一个新的数据库对象(未定义 tables),您在其中定义了一个 table(部门),该 table(部门)引用了另一个不再存在。