如何在表单中使用下拉列表而不是其引用ID来放置字段名称?

时间:2013-12-19 22:50:57

标签: python web2py

这是模型x.py:

# coding: utf8
db.define_table('dept',
            Field('name',unique=True,label='Department Name'))

db.define_table('course',
            Field('dept_id','reference dept'),
            Field('name',unique=True,label='Course Name'))

这是控制器x.py:

# create a new department:
def create_dept():
    form = SQLFORM(db.dept).process(next=URL('show_dept'))
    return dict(form=form)

# list all departments
def show_dept():
    rows = db().select(db.dept.ALL)
    return dict(rows=rows)

# create new course:
def create_course():
    form = SQLFORM(db.course).process(next=URL('show_all_course'))
    return dict(form=form)

# list all courses
def show_all_course():
    rows = db().select(db.course.ALL)
    return dict(rows=rows)

现在这是x / create_course的视图:

{{extend 'layout.html'}}
<h1>This is the x/create_course.html template</h1>
<h2>
    Enter the name of the course you want to create
</h2>
{{=form}}

现在我的问题是 - &gt;当我创建一个新课程时,我必须自己填写部门(部门)ID,如何在部门名称显示的下拉列表中选择部门名称并输入新的课程名称,然后按提交,然后按在该部门创建一门新课程。

1 个答案:

答案 0 :(得分:2)

db.define_table('dept',
    Field('name',unique=True,label='Department Name'),
    format='%(name)s')

如果给db.dept表一个“format”属性(如上所述),那么引用它的任何字段都将获得一个默认的IS_IN_DB验证器,它将产生一个下拉值,其值基于“format”属性(引用字段还将根据“format”属性获得默认的“represent”属性。)