[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