0

大家

我正在尝试为上下文以外的对象制作编辑表单。它是存储在会话中的字典。我正在关注 Martin Aspeli Schema Drive Forms。这应该很容易,但由于某种原因,编辑表单不会加载任何数据。也许我丢失了一些简单的细节,但我找不到它。我做了 ignoreContext=True 并尝试返回一个字典,然后返回一个实现模式的实例,但它没有工作。

from plone.directives import form, dexterity
from zope.interface import invariant, Invalid, implements

class IUser(form.Schema):
    '''Represents an user'''

    uid = schema.TextLine(
        title = _(u'Login'),
        )
    gn  = schema.TextLine(
        title = _(u'Name'),
        )
    sn  = schema.TextLine(
        title = _(u'Surname'),
        )
    uniqueIdentifier  = schema.TextLine(
        title = _(u'Identifier'),
        description = _(u'Ej. V11222333'),
        )
    accClass = schema.TextLine(
        title = _(u'User class'),
        )
    dateExpiration = schema.TextLine(
        title = _(u'Date of expiration'),
        )

class User:
    implements(IUser)

    def __init__(self, **kargs):
        self.uid = kargs['uid']
        self.gn = kargs['givenName']
        self.sn = kargs['sn']
        self.uniqueIdentifier = kargs['uniqueIdentifier']
        self.accClass = kargs['accClass']
        self.dateExpiration = kargs.get('dateExpiration', '2015/06')

class Edit(form.SchemaEditForm):
    '''Modify User'''
    grok.context(IUserManager)  # It's ok. This is a view of an IUserManager object
    grok.require('zope2.View')  # <- just for testing
    grok.name('modify')

    schema = IUser
    ignoreContext = True
    label = 'Modify an User'

    def getContent(self):
        # I've tried returning a dictionary too, but it's useless
        user = User(**SessionUsers(self.context).current())
        return user
4

0 回答 0