web2py, отношения с базой данных и разрешения - PullRequest
1 голос
/ 29 июля 2011

Так что у меня есть эта проблема у меня есть 2 таблицы, например Шаблоны (идентификатор, user_id, template_name ссылка) user_settings (идентификатор, user_id, default_template)

так что каждый пользователь может создать множество шаблонов, и в своих настройках он может выбрать шаблон по умолчанию, который он всегда будет использовать

так что теперь есть много пользователей, поэтому, когда пользователь хочет выбрать шаблон по умолчанию, он может видеть все шаблоны (свои собственные шаблоны и шаблоны для других пользователей)

таблицы определены так:

db.define_table('i2l_templates',
    Field('id','id',
          represent=lambda id:SPAN(A('view',_href=URL('view_template',args=id)),' | ',
                                          A('edit',_href=URL('edit_template',args=id)))),
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False,
          label=T('User Id')),
    Field('template_name', requires=IS_NOT_EMPTY(), type='string',
          label=T('Template name')),
...
...
...
)

db.define_table('user_settings',
    Field('id','id',
          represent=lambda id:SPAN(A('view',_href=URL('view_settings',args=id)))),
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False,
          label=T('User Id')), 
    Field('standard_template_id', templates,
          label=T('Standard Template')),
...
...
)

что я должен сделать, чтобы пользователь выбрал только свой собственный шаблон!

1 Ответ

0 голосов
/ 30 июля 2011

Во-первых, не должно

    Field('standard_template_id', templates,

быть

    Field('standard_template_id', db.i2l_templates,

Для справочного поля по умолчанию используется средство проверки формы IS_IN_DB(db,'<table>.id'), которое выберет все записи в ссылочной таблице. Однако вы можете переопределить валидатор по умолчанию и указать подмножество записей:

requires = IS_IN_DB(db(db.i2l_templates.id==auth.user_id),
                    'i2l_templates.id', '%(template_name)s')

См. здесь , чтобы узнать больше о валидаторах базы данных.

...