выбрать более одного значения из списка множественного выбора

Я хочу знать, что единственный способ сделать список с множественным выбором - это создать таблицу мостов между двумя таблицами ??

У меня есть таблицы (member,language,member_language)--> у каждого члена есть один или несколько языков, я сделал список языков с множественным выбором, и я выбрал больше, чем язык, он работает нормально.

Но я хочу сделать то же самое в таблице регионов, но здесь у члена есть только один регион, поэтому, когда я выбираю более одного региона из списка регионов с множественным выбором, это вызывает ошибку «значение не в базе данных!», и когда я выбираю одно значение из списка регионов работает нормально.

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

Как я могу это сделать??

мой код:

часть базы данных

db.define_table("region_tmp", SQLField("name","string")) db.region_tmp.name.requires = IS_IN_DB(db,'region_tmp.name',multiple=True)

часть формы:

form=SQLFORM(SQLDB(None).define_table('myform',
       db.region_tmp.name,,submit_button="Generate Report")

Вывод моего кода представляет собой список регионов с множественным выбором, когда я выбираю более одного региона из списка регионов. Форма отображает «значение не в базе данных!» сообщение в списке регионов, и когда я выбираю один регион из списка регионов, он работает нормально, и создается отчет.

Заранее спасибо


person Neveen    schedule 11.10.2009    source источник


Ответы (1)


Если я правильно понимаю, вы хотите отображать все регионы в форме множественного выбора, что бы использовать для возврата выбранных регионов без модификации базы данных?

Вы должны сначала выбрать все регионы из своей базы данных (полагаю, вы уже это сделали), а затем поместить их в ФОРМУ. Например, если в вашей таблице regions есть поле name:

rows= db().select(db.regions.ALL)
components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
return dict(form=FORM(INPUT(_type="submit"),
                      *components),
                      _method="post", _action="")

вернет форму, которую можно вставить в шаблон. Вы можете использовать что-то другое, кроме LI, например P или BR, вы также можете добавить лучшее форматирование (таблицу, ...), но это всего лишь идея.

Это была первая часть. Чтобы извлечь выбранную информацию, вы можете использовать ее в своей функции контроллера:

def index():
    # Prepare the form
    rows = db().select(db.regions.ALL)
    components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
    form=FORM(INPUT(_type="submit"),
              *components,
              _method="post", _action="")

    if request.post_vars.get("submit"):
        # Check the answer
        # ... more code ...
        redirect(URL(r=request, f="show", args=request.args))
    return dict(form=form)

def show():
    # ... more code ...

(вам нужно будет проверить условие после if, я не уверен на 100%). index() будет вызываться в первый раз для отображения формы и во второй раз, когда пользователь нажимает кнопку «Отправить». Во второй раз он должен войти в условие, сделать все, что вам нужно (получить значения региона), и перенаправить вывод на другую страницу (здесь функция show()).

Я просто даю вам общую идею, но вы действительно должны изучить учебник и часто задаваемые вопросы о web2py, чтобы разобраться с этой структурой.

person RedGlyph    schedule 11.10.2009
comment
не совсем то, что я хочу, я хочу создать отчет в формате csv, но есть некоторые критерии для создания отчета в соответствии с ними, один из критериев отчета - это регионы, например: создать отчет, где у участников есть регион zamalek или 6 октября, поэтому я отобразил список регионах, но при отправке формы отображалось следующее сообщение. Спасибо - person Neveen; 11.10.2009
comment
Что ж, в первой части выше показано, как отобразить форму со списком регионов, чтобы выбрать, какие из них вас интересуют. Разве это не то, что вы пытаетесь сделать? Что касается сообщения, трудно сказать без кода или информации. - person RedGlyph; 11.10.2009
comment
Спасибо за все ваши усилия по ответу на мои вопросы. Я новичок в технологии web2py. поэтому некоторые понятия упущены. Еще раз спасибо. - person Neveen; 12.10.2009
comment
я исправил проблему выбора одного из регионов, в его названии есть пробел, например: (выберите 5-е поселение и 6-е октября), я не знаю, почему это может вызвать эту проблему. так у вас есть какое-нибудь решение Спасибо - person Neveen; 12.10.2009