当为id>3的用户使用SQLFORM时,尽管在web2py的引用表中有引用记录,但仍存在外键约束

当为id>3的用户使用SQLFORM时,尽管在web2py的引用表中有引用记录,但仍存在外键约束,web2py,Web2py,我获取外键约束失败错误。不过,我在参考表中有记录。这种情况只发生在登录用户身上。对于id为 在上面,您将patient的值设置为auth.user.id,这是auth_user表中的一个id。但是,分配的“患者”字段必须是“患者”表中的id,因为它属于“参考患者”类型。相反,您可能需要表单刚刚插入到患者中的记录的id,即form.vars.id: 还考虑Auth.U.R.ID始终是当前登录用户的ID。不清楚您对auth.user.id的其他使用是否合适,即使用db.Roles.insert和au

我获取外键约束失败错误。不过,我在参考表中有记录。这种情况只发生在登录用户身上。对于id为 在上面,您将patient的值设置为auth.user.id,这是auth_user表中的一个id。但是,分配的“患者”字段必须是“患者”表中的id,因为它属于“参考患者”类型。相反,您可能需要表单刚刚插入到患者中的记录的id,即form.vars.id:

还考虑Auth.U.R.ID始终是当前登录用户的ID。不清楚您对auth.user.id的其他使用是否合适,即使用db.Roles.insert和auth.add_成员身份,因为在表单中选择为医生或患者的用户不一定是登录用户

    db.define_table('Roles',    
            Field('person', db.auth_user),    
            Field('role'))    
    db.define_table('Doctors',
            Field('doctor', db.auth_user, required = True),    
            Field('age', 'integer', required = True),    
            Field('qualification'),    
            Field('specialization'),    
            format = '%(doctor)s'    
            )    

    db.define_table('Patients',    
            Field('patient', db.auth_user, required = True),    
            Field('age', 'integer', required = True),    
            Field('doctor', db.Doctors, required = True),     
            Field('temperature', 'double'),     
            Field('blood_pressure', 'double'),     
            Field('haemoglobin', 'double'),     
            Field('contact_name'),     
            Field('contact_phone', 'bigint'),     
            format = '%(patient)s'     
           )     

    db.define_table('Assignments',     
            Field('doctor', 'reference Doctors', unique = False),     
            Field('patient', 'reference Patients', unique = False))     
def registerRole():    
role = int(request.args[0])    
form = FORM()    
if role == 1:    
    form = SQLFORM(db.Doctors).process()    
elif role == 2:    
    form = SQLFORM(db.Patients).process()    
if form.accepted:    
    response.flash = 'form accepted'    
    if role == 1:    
        db.Roles.insert(person = auth.user.id, role = 'doctor')
            auth.add_membership(auth.id_group('doctor'),auth.user.id)
        elif role == 2:
            i = 1
           db.Assignments.insert(doctor = int(form.vars.doctor), patient = auth.user.id)    
         db.Roles.insert(person = auth.user.id, role = 'patient')    
         auth.add_membership(auth.id_group('patient'),auth.user.id)    
     redirect(URL('index'))    
else:    
    response.flash = form.errors    
return dict(form = form, role = role)    
db.Assignments.insert(doctor = int(form.vars.doctor), patient = auth.user.id)
db.Assignments.insert(doctor = int(form.vars.doctor), patient = form.vars.id)