如何在 Turbogear 中创建编辑表单
How to create edit forms in Turbogear
如何创建编辑表单。对于 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>
有几种方法可以实现这一点,但我认为最简洁的方法是将值从控制器操作传递到表单,如 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))
请记住,这只是一个概念证明,我还没有测试代码,它缺乏适当的 validation/error 处理。但它应该几乎给出了这样的想法,即在显示它时,您只需通过 value
参数将学生姓名传递给表单。
如何创建编辑表单。对于 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>
有几种方法可以实现这一点,但我认为最简洁的方法是将值从控制器操作传递到表单,如 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))
请记住,这只是一个概念证明,我还没有测试代码,它缺乏适当的 validation/error 处理。但它应该几乎给出了这样的想法,即在显示它时,您只需通过 value
参数将学生姓名传递给表单。