2016-01-28 3 views
0

нужна подсказка для встроенного автозаполнения web2py.Виджет web2py autocomplete не работает

в контроллере: db.otc_products.counterparty.widget = SQLFORM.widgets.autocomplete (запрос, db.counterparty.Long_Name, limitby = (0,10), min_length = 2)

в модели:

db.define_table ('otc_products', поле ('контрагент', 'ссылка контрагента, виджет = SQLFORM.widgets.autocomplete (запрос, db.counterparty.Long_Name, id_field = db.counterparty.id, limitby = (0,20), min_length = 2)), ...

db.define_table («контрагент», поля («параметр long_name»), ...

Приведенного sqlform.grid возвращает сетку, которая показывает поле контрагента быть регулярным полем таблицы вместо виджета, не говоря уже о виджетах autocompelete.

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

благодарит за пользователя advance! проверьте ссылку выше для снимка сетки tge.

+0

Вы говорите, что сетка содержит «обычное поле таблицы вместо виджета». Но сетка должна показывать данные, хранящиеся в записях базы данных. Виджеты - это формы, а не сетка. Виджет автозаполнения предназначен для заполнения пустого поля формы с единственным значением, взятым из всего столбца таблицы базы данных. С другой стороны, ячейка в сетке предназначена для отображения существующего значения определенного поля в конкретной записи. Вы хотите, чтобы вы могли редактировать записи в строке в сетке? Если это так, обратите внимание, что сетка не включает такие функции. – Anthony

+0

@ Энтони, поэтому виджет автозаполнения не используется для sqlform.grid? это точно. на уровне виджета большинство виджета поддерживают сетку, однако, как и в моем снимке, вы можете видеть другие столбцы, кроме того, что контрагенты являются встроенными изменениями, dela_id - это StringWidget, второй столбец - OptionWidget.those были определены в моем контроллере, как показано ниже и они действительно работают для grid: db.otc_products.DealID.represent = lambda value, row: string_widget (db.otc_products.DealID, value, ** {'_ name': 'DealID_row_% s'% row.id}) –

ответ

0

Атрибут .widget объекта Field создает элемент ввода формы HTML, используемый для поля в формах, созданных с помощью SQLFORM. Сетка имеет значение , отображающее значения, хранящиеся в базе данных, а не для редактирования этих значений. Поэтому отображение заданного поля в сетке определяется атрибутом поля .represent, а не атрибутом .widget.

Как вы уже упоминали в своем комментарии выше, вы можете использовать виджет формы в атрибуте .represent, а сетка будет отображать виджет. Однако, как в вашей модели, так и в коде контроллера выше, вы установили атрибут .widget поля counterparty, а не атрибут .represent.

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

Теоретически вы можете создавать собственные встроенные функции редактирования поверх сетки (через Javascript, который считывает значения из входов и отправляет обновленные записи на сервер через Ajax). Но эта функциональность не встроена в сетку.

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

+0

что вы указали правильно, это помогает мне понять виджеты после чтения файла sqlhtml.py. то, что я пытаюсь закодировать, - это система, содержащая сложную структуру в бухгалтерском учете, а также CRM, поэтому пользователь запрашивает автозаполнение в строке. Мне придется прибегнуть к javascript/css для рендеринга этого в сетке, ведь сетка - это то, что они любят видеть и работать. –

0

Для web2py и StackOverflow общин и полноты, разработчик, который использует преимущества этой структуры и оптимизации веб-разработки:

sqlform.сетка может быть вторично разработана, чтобы в какой-то мере расширить ее возможности, просто нужно быть очень хорошо знакомы с базовыми файлами .py, которые с открытым исходным кодом и могут быть модифицированы для удовлетворения ваших потребностей.

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

http://www.web2pyslices.com/slice/show/1928/basic-inline-editing-in-sqlformgrid-no-plugin-no-javascript

пса: Я с использованием web2py для более быстрого развития для финансовой фирмы, так что действительно нет времени для меня, чтобы расширить эти рамки, чтобы unclock дополнительных функциональных возможностей, как выше. когда у меня есть свободное время, если есть реальная потребность в разработке, я буду расширять web2py для конкретного требования и размещать код в Интернете.

Смежные вопросы