Как создать формы редактирования в Turbogear - PullRequest
0 голосов
/ 03 июля 2018

Как создавать формы редактирования. Для редактирования 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 Ответ

0 голосов
/ 04 июля 2018

Есть несколько способов добиться этого, но я бы сказал, что самый чистый - это передача значений в форму из действия контроллера, как показано на http://turbogears.readthedocs.io/en/latest/turbogears/widgets_forms.html#displaying-forms

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

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 при его отображении.

...