[Zope3-Users] Custom addform and object creation error

Reuben Christie rchristie at decisiontech.com
Tue May 3 18:01:33 EDT 2005

Hi, cliff,
Could you please explain me how to create custom edit form for archetype ? i
guess thats what you have done when you said customAddForm
Quoting Cliff Ford <Cliff.Ford at ed.ac.uk>:

> To answer my own question, and for the benefit of anyone else who wants
> to customise an addform:
> Even though I have a class with a createAndAdd method I found that it
> was necessary to include the content_factory directive in the addform
> configuration as well as the class and template directives.
> I copied the createAndAdd method from ../zope/app/form/browser/add.py
> and added this line: self.gotoURL = str(content.__name__) after content
> = self.add(content), having previously set gotoURL='' as a class
> variable. I have a nextURL method:
> def nextURL(self):
>      return '../%s' % self.gotoURL
> And lo and behold on submission of the add form I get the browser view
> of the added object. Magic!
> I am doing this customisation because I want to collect essential Dublin
> Core data with data for the content object, rather than rely on users
> filling in the metadata form later.
> Cliff
> Cliff Ford wrote:
>> I have a custom addform that works fine with a standard 
>> configuration. However, on submission it redirects to the contents 
>> view of its container and I want it to redirect somewhere else, such 
>> as the new object's edit or metadata views. All I really need is a 
>> nextURL configuration directive, mentioned in mailings some time 
>> ago, but I don't think that has been implemented.
>> I have created a class with a __call__ method that returns the 
>> custom form template, and a nextURL() method. In the configuration 
>> file I have replaced the content_factory directive with the class 
>> directive.
>> With the custom form and class, the form displays and field 
>> validation still works, but with valid fields I get an object 
>> creation error:
>> File "/usr/local/Zope3/src/zope/app/form/browser/add.py", line 71, in create
>>     return self._factory(*args, **kw)
>> TypeError: 'NoneType' object is not callable
>> I have looked at the add.py module and am none the wiser. I guess I 
>> have neglected to set something somewhere, may be context related. 
>> Can anyone enlighten me? The custom class has almost nothing in it 
>> (see below) so I am surprised it gets as far as it does. [I have 
>> also searched the archives and read both recent Zope3 books but 
>> can't find an answer.]
>> Cliff
>> Custom class:
>> from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
>> class PageAddFormD:
>>     """This class reads the form data and creates a custom Page"""
>>     template = ViewPageTemplateFile('pageaddformd.pt')
>>     def __call__(self):
>>         return self.template()
>>     def getInterfaces(self):
>>         """ Don't know if I need this here """
>>         return implementedBy(GlgPage)
>>     def nextURL(self):
>>         """ return the next place to go """
>>         # have not got this far yet
>>         return '../'
>> _______________________________________________
>> Zope3-users mailing list
>> Zope3-users at zope.org
>> http://mail.zope.org/mailman/listinfo/zope3-users
> _______________________________________________
> Zope3-users mailing list
> Zope3-users at zope.org
> http://mail.zope.org/mailman/listinfo/zope3-users

More information about the Zope3-users mailing list