如何更改默认/用户/配置文件表单,以便用户可以在auth_group表中选择一个已创建的组?

时间:2014-04-10 04:43:24

标签: python web2py

嗯,几乎我在标题中提到的内容:我想更改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中的内容?

screenshot of 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)时,我只能看到表单中的字段,但不能看到应该在那里的下拉菜单......我还应该设置或定义其他一些东西吗?

screnshot of /default/user/profile


修改

好的,我尝试使用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 则不会。 ..

1 个答案:

答案 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属性。在这种情况下,您必须手动指定。