выберите более одного значения из списка - PullRequest
0 голосов
/ 11 октября 2009

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

У меня есть таблицы (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")

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

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

1 Ответ

0 голосов
/ 11 октября 2009

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

Вы должны сначала выбрать все регионы из вашей базы данных (я полагаю, вы уже сделали), а затем поместить их в форму. Например, если в вашей таблице 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, чтобы получить представление об этой платформе.

...