skip to navigation
skip to content

megrok.z3cform.crud 0.1

Crud forms for Grok, using z3c.form

Downloads ↓

Crud

This module gives you an abstract base class to make CRUD forms with. These forms give you by default a tabular view of the objects, where attributes of the object can be edited in-place. Please refer to the ICrudForm interface for more details.

>>> from megrok.z3cform.crud import crud

Form registration

Models

We set up some models to serve as a form context:

>>> 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)

For this test, we take the the name of our persons as keys in our storage:

>>> storage = PersonContainer()
>>> storage['Peter'] = Person(u'Peter', 16)
>>> storage['Martha'] = Person(u'Martha', 32)

We declare the Form with the help of megrok.z3cform.base. It's very similar to a 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]

Grokking and querying

We let Grok register the component:

>>> grok.testing.grok_component('form', TestForm)
True

Now, we can query it normally:

>>> 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">
...

Changelog

0.1

  • Initial release
 
File Type Py Version Uploaded on Size # downloads
megrok.z3cform.crud-0.1.tar.gz (md5) Source 2011-07-06 16KB 308