【问题标题】:How to create edit forms in Turbogear如何在 Turbogear 中创建编辑表单
【发布时间】:2018-07-03 19:51:09
【问题描述】:

如何创建编辑表单。对于 url edit?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>  

【问题讨论】:

    标签: turbogears2 toscawidgets


    【解决方案1】:

    有几种方法可以实现这一点,但我想说最干净的方法是将值从控制器操作传递给表单,如 http://turbogears.readthedocs.io/en/latest/turbogears/widgets_forms.html#displaying-forms 所示

    在您的具体示例中,它应该产生一个仅声明需要编辑的字段和对已编辑对象 ID 的引用的表单:

    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 参数将学生姓名传递给表单。

    【讨论】:

    • 这适用于 TextField 但对于 SingleSelectField 我传递了这样的值,但它不起作用.. form=EditForm(action='/save', value=dict(student_id=id, name=edited_student.名称,主题={“选项”:['english',“数学”])
    • 我的意思是 db form=EditForm(action='/save', value=dict(student_id=id, name=edited_student.name, subject={"options":edited_student.subjects)
    • 对于单选,您仍然可以提供“值”,因此使用“值”参数选择的条目。对于选项,您需要使用options=twf.Deferred(any_callable) 将它们指定为延迟参数,或者您可以在使用form.child.children.project.options = selectable_projects 显示表单之前设置它们,请参阅gist.github.com/amol-/db5922ba78551e739dc32b7365f0c991 以获取工作示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2013-05-05
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2020-12-16
    相关资源
    最近更新 更多