2016-08-14 16 views
0

我的代碼是下面的IM嘗試指派一個部門的員工,並在部門表引用在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' 
      ) 

回答

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

或者,您可以定義department表之後定義requires屬性:

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

AttributeError:'DAL'對象在做之後沒有屬性'employee' – user3821178

+0

我認爲這個問題並不是require屬性,因爲ive移除了它並得到了另一個錯誤;添加''後我得到了ValueError:太多的值解開 – user3821178

+0

根據您在Google Group中的相關帖子,您在代碼中引入了兩個新錯誤(未在上述問題中顯示),因此這裏很難回答。 – Anthony

0

如果刪除第二db = DAL(lazy_tables=True),你應該沒問題。

您遇到的問題是您基本上通過在第一個表定義(employee)之後聲明/實例化第一個數據庫對象來重寫第一個數據庫對象。

這爲您提供了一個新的db對象(沒有定義表格),您可以在其中定義引用另一個不再存在的表格(員工)的表格(部門)。

相關問題