为Grok提供使用z3c.form的CRUD表单
项目描述
Crud
此模块为您提供了一个抽象基类,用于创建CRUD表单。这些表单默认提供对象的表格视图,其中可以就地编辑对象的属性。有关详细信息,请参阅ICrudForm接口。
>>> 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.View非常相似
>>> 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注册组件
>>> 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
初始发布