Несколько экземпляров таблицы в форме web2py - PullRequest
1 голос
/ 08 октября 2011

Попытка сделать опрос в приложении web2py.

Модель

db.define_table('t_query',
    Field('f_content', type='text', requires=IS_NOT_EMPTY(),
          label=T('Content')),
    SQLField('is_active',db.auth_user,writable=False,readable=False),
    auth.signature,
    migrate=settings.migrate)

db.define_table('t_option',
    Field('f_ocontent', type='string',requires=IS_NOT_EMPTY(),
          label=T('Option')),
    auth.signature,
    migrate=settings.migrate)

Контроллер

def ask():
    form=SQLFORM.factory(db.t_query,db.t_option,db.t_option)
    if form.process().accepted:
        id = db.t_query.insert(**db.t_query._filter_fields(form.vars))
        form.vars.client=id
        id = db.t_option.insert(**db.t_option._filter_fields(form.vars))
        response.flash='Thanks for filling the form'
        id = db.t_option.insert(**db.t_option._filter_fields(form.vars))
        response.flash='Thanks for the question'
    return dict(form=form)

Просмотр

{{extend 'layout.html'}}

<h2>Start a Poll</h2>
{{=form}}

выход
current

Я попытался найти способ попросить SQLFORM использовать поля из одной и той же таблицы несколько раз в форме.

Это то, что я ожидаю:
gexpectation

Как мне это сделать?

Задал тот же вопрос на web2py @ googlegroups https://groups.google.com/forum/#!topic/web2py/48tO5ncC2t4

1 Ответ

1 голос
/ 31 июля 2012

Похоже, вы хотите иметь возможность хранить список строк для одного поля. Насколько я знаю, вы не можете повторять одно и то же поле несколько раз (куда будут поступать данные в базе данных? Существует только одно поле для его хранения, поэтому вам нужно его сериализовать и заклинить там, если вы хотите 0. .n значения в одном поле)

Используйте это, чтобы получить несколько строк в одном поле:

db.define_table(...
  ...
  Field('f_ocontent', 'list:string')
)

Это будет хранить данные внутри как:

|option1val|option2val|option3val|

или, если пусто:

||

Вы можете нажать ввод, когда вы входите с более чем 0 символами, и это создаст новый вход.

...