grok的crud表单,使用z3c.form
megrok.z3cform.crud的Python项目详细描述
积垢
此模块为您提供了一个抽象基类,用于生成CRUD表单。 默认情况下,这些表单提供对象的表格视图,其中 对象的属性可以就地编辑。请参考 ICrudForminterface了解更多详细信息。
>>> from megrok.z3cform.crud import crud
表单注册
型号
我们建立了一些模型作为表单上下文:
>>> import grokcore.component as grok >>> from zope import interface, schema >>> class IPerson(interface.Interface): ... name = schema.TextLine(title=u"Name") ... age = schema.Int(title=u"Age") >>> class Person(grok.Context): ... grok.implements(IPerson) ... name = schema.fieldproperty.FieldProperty(IPerson['name']) ... age = schema.fieldproperty.FieldProperty(IPerson['age']) ... ... def __init__(self, name, age): ... self.name = name ... self.age = age >>> class IPersonContainer(interface.Interface): ... pass >>> class PersonContainer(dict): ... grok.implements(IPersonContainer)
在这次测试中,我们将人员的姓名作为 存储:
>>> storage = PersonContainer() >>> storage['Peter'] = Person(u'Peter', 16) >>> storage['Martha'] = Person(u'Martha', 32)
我们在megrok.z3cform.base的帮助下声明此表。它与Grok非常相似。视图:
>>> import megrok.z3cform.base as z3cform >>> class TestForm(crud.CrudForm): ... grok.context(IPersonContainer) ... ... update_schema = IPerson ... ... def get_items(self): ... return sorted(storage.items(), key=lambda x: x[1].name) ... ... def add(self, data): ... person = Person(**data) ... storage[str(person.name)] = person ... return person ... ... def remove(self, (id, item)): ... del storage[id]
摸索和查询
我们让grok注册组件:
>>> grok.testing.grok_component('form', TestForm) True
现在,我们可以正常查询:
>>> from zope.publisher.browser import TestRequest >>> request = TestRequest() >>> from zope.component import getMultiAdapter >>> myform = getMultiAdapter((storage, request), name="testform") >>> myform <TestForm object at ...> >>> print myform() <form action="http://127.0.0.1" method="post" enctype="multipart/form-data" class="form-testform"> ...
更改日志
0.1
- 初始版本