web2py记录中的引用字段在插入之前包含0,尽管它的表示不等于0 .

要更详细地解释,您可以在下面看到web2py模型中的函数和表定义 . 表中包含对工作人员的一个项目元素赋值的工作人员预订,“SB_AS_ref”是指“db.IT_C_AssignedStaff”相应的记录,这反过来又指向一个员工的记录,工作人员记录包含需要每小时收费值计算(参见字段SB_Value中的“compute”),如calcSB_value(refTo_SB_AS_ref,hours)中所定义 .

这期间记录的 editing 的作品,但是当我 add 记录(在数据管理或网格,不有所作为),行['SB_AS_ref']包含零,尽管我已经选择了一个被称为记录的事实前端有“db.IT_C_AssignedStaff”(不是那么"hours",它们正确包含我输入的值) .

在插入新记录之前我可以采取哪些措施来获得正确的参考值(或者我是否检测到了错误)?提前致谢!

def calcSB_Value(refTo_SB_AS_ref,hours):
    rows = \ 
        db(db.IT_C_AssignedStaff.id==int(refTo_SB_AS_ref)
           ).select()
    staffID = rows[0].AS_ST_ref
    rows = db(db.IT_C_Staff.id==staffID).select()
    hourlyRate = rows[0].ST_HourlyRate
    return hours * hourlyRate

#----------------------------------------------
# MODEL
db.define_table('IT_C_StaffBooking',
                Field('SB_AS_ref', db.IT_C_AssignedStaff,
                      required=True,
                      notnull=True,
                      label='Reference to staff assignment',
                      authorize=False,
                      uploadfield=False,
                      uploadseparate=False,
                      ondelete='CASCADE',
                      ),
                Field('SB_Date', type='date',
                      required=True,
                      notnull=True,
                      comment='Latest booking date',
                      label='Date of activity',
                      authorize=False,
                      uploadfield=False,
                      uploadseparate=False,
                      ondelete='CASCADE',
                      ),
                Field('SB_hours', type='integer',
                      required=True,
                      notnull=True,
                      comment='Latest booking date',
                      label='duration of activity',
                      authorize=False,
                      uploadfield=False,
                      uploadseparate=False,
                      default='0',
                      ondelete='CASCADE',
                      ),
                Field('SB_Value', type='decimal(10,2)',
                      compute=
                          lambda row: calcSB_Value(row['SB_AS_ref'],row['SB_hours']),
                      notnull=True,
                      comment='Will be calculated',
                      label='Value = duration * hourly rate',
                      authorize=False,
                      uploadfield=False,
                      uploadseparate=False,
                      default='0',
                      ondelete='CASCADE',
                      ),
                format='%(SB_AS_ref)s, %(SB_Date)s '
                )