Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
web2py记录中的引用字段在插入之前包含一个0,尽管它是’;s表示不等于0_Web2py - Fatal编程技术网

web2py记录中的引用字段在插入之前包含一个0,尽管它是’;s表示不等于0

web2py记录中的引用字段在插入之前包含一个0,尽管它是’;s表示不等于0,web2py,Web2py,web2py记录中的引用字段在插入之前包含0,尽管其表示形式不等于0 为了更详细地解释,您可以在下面看到web2py模型中的函数和表定义。 该表包含针对项目要素员工分配的员工预订,“SB_AS_ref”指“db.IT_C_AssignedStaff”中的相应记录,该记录反过来指向员工记录,员工记录包含价值计算所需的小时费率(见SB_value字段中的“计算”),如calcSB_值中所定义(参考至_SB_作为参考,小时) 这在编辑记录时起作用,但当我添加记录时(在数据管理或网格中,没有区别),行[

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

为了更详细地解释,您可以在下面看到web2py模型中的函数和表定义。 该表包含针对项目要素员工分配的员工预订,“SB_AS_ref”指“db.IT_C_AssignedStaff”中的相应记录,该记录反过来指向员工记录,员工记录包含价值计算所需的小时费率(见SB_value字段中的“计算”),如calcSB_值中所定义(参考至_SB_作为参考,小时)

这在编辑记录时起作用,但当我添加记录时(在数据管理或网格中,没有区别),行['SB_AS_ref']包含一个零,尽管我已经在前端选择了一个引用记录“db.IT_C_AssignedStaff”(不是“小时”),它们正确地包含我输入的值)

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

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

您可以设置
default='0'
,该实用程序可以使用默认值填充表单字段,在您的情况下,默认值是
'0'
,因此,为什么您的表单中已经有一个输入值。。。在这一点上,这与代表性无关。。。表示的目的是用引用表的给定列(而不是ID列)表示ID字段。此处:
db.IT\u C\u AssignedStaff
您应该使用
reference IT\u C\u AssignedStaff
这是定义引用表的首选方法。。。此外,您应该遵循PEP8()我会查看您的表单代码,以便更好地理解您的问题…如果您的字段不是
upload
类型,则在每个字段定义上指定
uploadfield=False
。。。它会使您的模型定义过于冗长,毫无意义……最好
staff_id=db(db.It_C_AssignedStaff.id==int(refTo_SB_AS_ref))。选择(db.It_C_AssignedStaff)。‌​首先(),然后是
。。。行[0]。作为标准参考