在定义web2py之前引用web2py中的表

时间:2016-08-14 20:52:07

标签: python web2py

我的代码是以下我尝试将部门分配给员工并在部门表中创建经理

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

2 个答案:

答案 0 :(得分:1)

url

在上面一行中,您引用了 Field('department', 'reference department', requires=IS_IN_DB(db, db.department.id, '%(department_name)s')), ,但尚未定义db.department.id表,因此department对象还没有db属性。

您应该能够使用这种替代语法:

department

或者,您可以在定义IS_IN_DB(db, 'department.id', '%(department_name)s') 表后定义requires属性:

department

答案 1 :(得分:1)

如果删除第二个db = DAL(lazy_tables=True),则应该没问题。

您遇到的问题是,您通过在第一个表定义(employee)之后再次声明/实例化它来基本上覆盖第一个db对象。

这为您提供了一个新的db对象(没有定义表),您可以在其中定义一个引用另一个不再存在的表(employee)的表(department)。