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

Python 在定义web2py中的表之前引用该表,python,web2py,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')

我的代码如下:我试图为员工分配一个部门,并在部门表中创建一个经理

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'
            )
在上行中,您引用了
db.department.id
,但尚未定义
department
表,因此
db
对象将没有
department
属性

相反,您应该能够使用以下替代语法:

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

db.employee.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
属性:

db.employee.department.requires = IS_IN_DB(db, db.department.id, '%(department_name)s')

如果删除第二个
db=DAL(lazy\u tables=True)
,您应该不会有问题

您所遇到的问题是,通过在第一个表定义(employee)之后再次声明/实例化第一个db对象,您实际上重写了第一个db对象


这将为您提供一个新的db对象(未定义表),您可以在其中定义一个引用另一个不再存在的表(员工)的表(部门)。

如果删除第二个
db=DAL(lazy\u tables=True)
,您应该不会有问题

您所遇到的问题是,通过在第一个表定义(employee)之后再次声明/实例化第一个db对象,您实际上重写了第一个db对象


这将为您提供一个新的db对象(未定义表),您可以在其中定义一个表(部门),该表引用另一个不再存在的表(员工)。

AttributeError:“DAL”对象在执行此操作后没有属性“employee”,我认为问题不是requires属性,因为我已将其删除并出现另一个错误;添加“”后,我得到了值错误:基于您在Google组中的相关帖子,有太多的值无法解包,您在代码中引入了两个新错误(在您上面的问题中未显示),因此,这里很难回答这个问题。AttributeError:“DAL”对象在执行此操作后没有属性“employee”,我认为问题不是requires属性,因为我删除了它,并出现了另一个错误;添加“”后,我得到了值错误:基于您在Google组中的相关帖子,有太多的值无法解压,您在代码中引入了两个新错误(上面的问题中没有显示),因此这里很难回答。