嗯,几乎我在标题中提到的内容:我想更改default/user/profile
表单,以便用户可以在auth_group
表中选择一个已创建的组。我尝试在db.py
中添加我想要显示的新字段以及 Role 字段,如下所示:
auth.settings.extra_fields['auth_user']= [
Field('phone'),
Field('id_role', 'reference auth_group', label='Role'),
Field('description')]
但是,在转到appadmin重新加载更改并进入default/user/profile
后,我可以看到新字段,但 Role 字段没有菜单或选项。我应该在Field Constructor中使用其他选项吗?
我尝试使用Field('id_role', 'reference auth_group.id', label='Role')
(请注意 .id )和Field('id_role', 'reference auth_group.role', label='Role')
(请注意 .role ),但只能看到相同的结果......
如何获得appadmin/insert/db/auth_membership
中的内容?
(在屏幕截图中,用户ID 和组ID ,以防万一)
修改
@Anthony,我尝试了你的方法 - 我在名为responsabilidad
的新db文件中创建了一个名为db1.py
的新表,如下所示:
db.define_table('responsabilidad',
Field('nombre','string'),
Field('descripcion','text'),
format='%(nombre)s')
请注意其中的format
属性。我在web2py手册中看到了你所说的内容:
format属性将用于两个目的:
表示select / option下拉列表中的引用记录。 ...
之后,我更新了db.py
文件,这是创建auth_user
表的文件,如下所示:
auth.settings.extra_fields['auth_user']= [
Field('telefono'),
Field('responsabilidad','reference responsabilidad'),
Field('descripcion')]
然而,当我转到/default/user/profile
(或appadmin/insert/db/auth_user
)时,我只能看到表单中的字段,但不能看到应该在那里的下拉菜单......我还应该设置或定义其他一些东西吗?
修改
好的,我尝试使用auth_user以外的表格。我创建了一个usuario
表以及上一个示例中的responsabilidad
表,并创建/修改了以下文件:
//db1.py
db.define_table('responsabilidad',
Field('nombre','string'),
Field('descripcion','text'),
format='%(nombre)s')
db.define_table('usuario',
Field('nombre','string'),
Field('id_responsabilidad', 'reference responsabilidad'))
//default.py
def test():
form = SQLFORM(db.usuario)
return locals()
//test.html
{{extend 'layout.html'}}
{{=form}}
现在表单正在按预期显示下拉菜单!
我仍然不明白为什么表单现在正确显示,但如果使用auth_user
而不是usuario
则不会。 ..
答案 0 :(得分:1)
定义引用字段(例如Field('myref', 'reference other_table')
)时,如果已定义(a)other_table
且(b)other_table
具有_format
属性,则myref
字段将根据IS_IN_DB
的{{1}}属性自动获取represent
验证程序和_format
属性。 other_table
验证器负责生成您期望的下拉菜单。
Auth表通常通过IS_IN_DB
定义。但是,这会导致auth.define_tables()
表在 auth_user
表之前定义,因此如果auth_group
表包含引用auth_user
的字段,该字段不会自动获取验证器和auth_group
属性。在这种情况下,您必须手动指定。