добавить новую (отсутствующую) запись в ссылочную таблицу из SQLFORM (SQLFORM.grid) в web2py - PullRequest
0 голосов
/ 21 октября 2018

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

имеет такую ​​ситуацию:

Модель:

db.define_table('main_entries',
    Field('type', 'reference entry_type' )
)

db.define_table('entry_type',
    Field('label')
)

Контроллер:

def entries_edit():
    form = SQLFORM.grid(db.main_entries)
    return dict(form=form)

Вид:

{{extend 'layout.html'}}
{{=form}}

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вы должны указать отношения в запросе.Вы можете попробовать что-то вроде этого:

def entries_edit():
    query = db(db.main_entries.type == db.entry_type.id)
    form = SQLFORM.grid(query)
    return dict(form=form)
0 голосов
/ 26 октября 2018

Вы можете управлять этим с помощью левой опции SQLFORM.grid

left - необязательные выражения левого соединения, используемые для построения ... select (left = ...).

Имеет смысл объединить это с параметром поля, чтобы указать поля обеих таблиц, которые должны отображаться.

fields - это список полей, которые нужно извлечь из базы данных.Он также используется для определения полей, которые будут отображаться в виде сетки.Однако он не контролирует то, что отображается в отдельной форме, используемой для редактирования строк.Для этого используйте доступный для чтения и записи атрибут полей базы данных.

И не забывайте ссылаться на ведущую таблицу с помощью параметра field_id

field_id должен бытьполе таблицы, которая будет использоваться в качестве идентификатора, например db.mytable.id.Это полезно, когда запрос сетки представляет собой объединение нескольких таблиц.Любая кнопка действия в сетке (добавить запись, просмотр, редактирование, удаление) будет работать над db.mytable.

cf. подпись SQLFORM.grid

...