[Grok-dev] Question re EditForm and ZPT
Christian Klinger
cklinger at novareto.de
Mon Nov 23 03:04:08 EST 2009
Hi Kathy,
yo can try this:
class Edit(grok.EditForm):
...
adapters = None
or
adapters = {}
I hope this will fix your error.
Christian
> I have created a ZPT which has the following button present:
> <input type="submit" id="SubmitButton" name="SubmitButton" value="Save"
> class="button" />
>
> The relevant class has an update method that is triggered by the button:
> class Edit(grok.EditForm):
> grok.context(Person)
> template = grok.PageTemplateFile('people_templates/edit.pt')
>
> def update(self, SubmitButton=None, **data):
> # Check if the submit button was clicked.
> if SubmitButton == None:
> print 'SubmitButton empty'
> if SubmitButton != None:
> print 'SubmitButton is:' + SubmitButton + ':'
> if SubmitButton == 'Save':
> print 'you hit the Save button'
> # copy the new or updated information
> print self.context
> print self
> self.applyData(self.context, **data)
> print 'have set fields'
>
> Error: AttributeError: 'Edit' object has no attribute 'adapters'
>
> Information using debug.ini:
>
> URL: http://localhost:8080/my%20system/people/entryValue/edit
> Module paste.evalexception.middleware:306 in respond
> << try:
> __traceback_supplement__ = errormiddleware.Supplement,
> self, environ
> app_iter = self.application(environ, detect_start_response)
> try:
> return_iter = list(app_iter)>> app_iter =
> self.application(environ, detect_start_response)
> Module paste.translogger:68 in __call__
> << self.write_log(environ, method, req_uri, start, status,
> bytes)
> return start_response(status, headers)
> return self.application(environ, replacement_start_response)
>
> def write_log(self, environ, method, req_uri, start, status,
> bytes):>> return self.application(environ,
> replacement_start_response)
> Module zope.app.wsgi:55 in __call__
> << handle_errors = environ.get('wsgi.handleErrors', True)
>
> request = publish(request, handle_errors=handle_errors)
> response = request.response>> request = publish(request,
> handle_errors=handle_errors)
> Module zope.publisher.publish:133 in publish
> << publication.afterTraversal(request, obj)
>
> result = publication.callObject(request, obj)
> response = request.response
> if result is not response:>> result =
> publication.callObject(request, obj)
> Module grok.publication:89 in callObject
> << if checker is not None:
> checker.check(ob, '__call__')
> return super(ZopePublicationSansProxy,
> self).callObject(request, ob)>> return
> super(ZopePublicationSansProxy, self).callObject(request, ob)
> Module zope.app.publication.zopepublication:167 in callObject
> <<
> def callObject(self, request, ob):
> return mapply(ob, request.getPositionalArguments(), request)
>
> def afterCall(self, request, ob):>> return mapply(ob,
> request.getPositionalArguments(), request)
>
> <test.person.Edit object at 0x0313DB30>
>
>
> Module zope.publisher.publish:108 in mapply
> <<
> if __debug__:
> return debug_call(obj, args)
>
> return obj(*args)>> return debug_call(obj, args)
> Module zope.publisher.publish:114 in debug_call
> << def debug_call(obj, args):
> # The presence of this function allows us to set a pdb breakpoint
> return obj(*args)
>
> def publish(request, handle_errors=True):>> return obj(*args)
> Module grokcore.formlib.components:84 in __call__
> <<
> def __call__(self):
> mapply(self.update, (), self.request)
> if self.request.response.getStatus() in (302, 303):
> # A redirect was triggered somewhere in update(). Don't
> >> mapply(self.update, (), self.request)
>
> <bound method Edit.update of<test.person.Edit object at 0x0313DB30>>
>
>
> Module zope.publisher.publish:108 in mapply
> <<
> if __debug__:
> return debug_call(obj, args)
>
> return obj(*args)>> return debug_call(obj, args)
> Module zope.publisher.publish:114 in debug_call
> << def debug_call(obj, args):
> # The presence of this function allows us to set a pdb breakpoint
> return obj(*args)
>
> def publish(request, handle_errors=True):>> return obj(*args)
> Module test.person:127 in update
> << print self
> #self.adapters = []
> self.applyData(self.context, **data)
> print 'have set fields'
> # if this is a new entry, it will have 'tempentry' as part
> of the last name
> >> self.applyData(self.context, **data)
> Module grokcore.formlib.components:128 in applyData
> << def applyData(self, obj, **data):
> return formlib.apply_data_event(obj, self.form_fields, data,
> self.adapters, update=True)
>
> # BBB -- to be removed in June 2007
> >> self.adapters, update=True)
> AttributeError: 'Edit' object has no attribute 'adapters'
>
> As this is just a button, and it's defined based on EditForm, why does
> applyData give an error?
>
> Hoping someone can help, as this really has me stumped - all the
> documentation says that I've done it right...
>
> Kathy
More information about the Grok-dev
mailing list