我在 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.course_name
字段的内容而不是courses.ID
字段来显示它们(因为 IS_IN_DB 要求中的字符串格式表示。
但是,我正在尝试对其进行修改,以使其不使用下拉选择菜单,而仅显示一个文本字段。我希望用户能够输入课程的名称,并且只要该名称是有效的course_name
.
为此,我向该字段添加了一个widget=SQLFORM.widgets.string.widget
属性。auth_user.course_name
正确显示文本框而不是下拉列表,但不允许用户输入course_name
. 如果输入了有效courses.id
的,它可以正常工作(如果它不是有效的 ID,则显示预期的错误消息)。
但是,我不知道如何让它接受 acourse_name
而不是 ID。我理论上可以使用自动完成插件(确实有效),但这样做的目的是让用户只在知道有效的情况下提交表单course_name
(有点像密码)。
这可能吗?