Как создать формы редактирования в Turbogear
Как создавать формы редактирования. Для редактирования URL? Id=1121 Я хочу отобразить предварительно заполненные данные
EditForm(twf.Form):
class child(twf.TableLayout):
name= twf.TextField(name="name",value=DBSession.query(student.name).filter(student.id == <id passed in url>).distinct().all())
@expose ('edit')
def edit(self, id)
return dict(page='edit', , form=EditForm(action='/save')
Шаблон:
<div>${form.display()}</div>
1 ответ
Есть несколько способов добиться этого, но я бы сказал, что самый чистый способ - передать значения в форму из действия контроллера, как показано на http://turbogears.readthedocs.io/en/latest/turbogears/widgets_forms.html
В случае вашего конкретного примера это должно привести к форме, которая объявляет только поля, требующие редактирования, и ссылку на идентификатор редактируемого объекта:
class EditForm(twf.Form):
class child(twf.TableLayout):
student_id = twf.HiddenField()
name = twf.TextField(name="name")
Затем в контроллере вы можете получить отредактированный объект и предоставить значения для формы:
@expose('edit')
def edit(self, id):
edited_student = DBSession.query(student).filter(student.id==id).first()
return dict(page='edit',
form=EditForm(action='/save',
value=dict(student_id=id,
name=edited_student.name))
Имейте в виду, что это просто подтверждение концепции, я не тестировал код, и в нем отсутствует надлежащая проверка / обработка ошибок. Но это должно в значительной степени дать представление о том, что вы просто передаете имя студента в форму через value
параметр при его отображении.