web2py, Отношения и разрешения базы данных

Итак, у меня есть эта проблема, у меня есть 2 таблицы, например шаблоны (id, user_id, template_name, ссылка) user_settings (id, 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')),
...
...
)

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


person Elteroooo    schedule 29.07.2011    source источник


Ответы (1)


Во-первых, не следует

    Field('standard_template_id', templates,

be

    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')

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

person Anthony    schedule 29.07.2011