Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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
Python web2py表单-按字符串字段而不是ID查找值_Python_Web2py_Web2py Modules - Fatal编程技术网

Python web2py表单-按字符串字段而不是ID查找值

Python web2py表单-按字符串字段而不是ID查找值,python,web2py,web2py-modules,Python,Web2py,Web2py Modules,我在web2py中有这样一个模型: db.define_table('courses', Field('course_name','string')) db.define_table('auth_user', .... .... Field('course_name',db.courses,label=T('Course Name'), required=True, requires=IS_IN_DB(db,db.courses

我在web2py中有这样一个模型:

db.define_table('courses',
    Field('course_name','string'))


db.define_table('auth_user',
    ....
    ....
    Field('course_name',db.courses,label=T('Course Name'),
        required=True,
        requires=IS_IN_DB(db,db.courses.id,'%(course_name)s'),
如果我基于auth_user表显示表单,
auth_user.course_name
字段由包含
courses
表中所有课程的下拉菜单表示。正如预期的那样,它使用
课程.courses\u name
字段的内容显示它们,而不是
课程.ID
字段(因为IS\u in\u DB要求中的字符串格式表示)

但是,我试图修改它,使其不使用下拉选择菜单,而只显示一个文本字段。我希望用户能够输入课程名称,并且只要该名称有效,表单就会正常工作

为此,我在
auth\u user.course\u name
字段中添加了一个
widget=SQLFORM.widgets.string.widget
属性。该属性正确地显示了一个文本框而不是下拉框,但不允许用户输入
course\u name
。如果输入了有效的
courses.id
,则效果良好(如果不是有效ID,则显示预期的错误消息)

然而,我不知道如何让它接受一个
课程名称
,而不是ID。理论上我可以使用自动完成插件(它确实有效),但其目的是允许用户只在知道有效的
课程名称
(有点像密码)的情况下提交表单


这可能吗?

我通过使用自定义验证类(替换Is\u IN\u DB验证程序)解决了这个问题。作为参考,我的验证程序是这样的:

class COURSE_NAME_VALIDATOR:
    def __init__(self, error_message='Unknown course name. Please see your instructor.'):
        self.e = error_message

    def __call__(self, value):
        if db(db.courses.course_name == value).select():
            return (db(db.courses.course_name == value).select()[0].id, None)
        return (value, self.e)
我从web2py手册()中获得了验证类的模板