[Zope3-Users] Should I be using a more basic form in Formlib than
EditForm?
Adam Summers
adam at 4js.com.au
Sat Dec 30 06:37:40 EST 2006
Hi all,
I have an edit form:
class claimEditForm(form.EditForm):
form_fields = form.Fields(Iclaim).omit('__name__', '__parent__')
@form.action(_("MyApply"), condition=form.haveInputWidgets)
def handle_edit_action(self, action, data):
if self.context.modify(data):
self.status = _(u"Object Updated")
else:
self.status = _(u"No Changes")
The object has a modify method, which looks like this:
def modify(self, kw):
fieldnames = getFieldNames(Iclaim)
for k in kw.keys():
if k not in fieldnames:
raise Invalid("Invalid Field to set: %s", k)
else:
field = Iclaim[k]
field.validate(kw[k])
setattr(self, k, kw[k])
self._completeValues() ###This method calculates some missing
data for the object (if possible) or raises an error
Iclaim.validateInvariants(self)
return True
The thing I don't understand is this: The invariant method I have in the
interface is being called twice.
First Pass through, object passed to my invariant is of type:
FormData: <zope.formlib.form.FormData instance at 0x3f07c10>
Call stack is:
debug_call [publish.py:114]
__call__ [form.py:773]
update [form.py:740]
handleSubmit [form.py:683]
validate [form.py:720]
checkInvariants [form.py:504]
validateInvariants [interface.py:583]
claimInvariants [interfaces.py:39]
(In certain cases the data will be invalid, because I need to prep a few
fields via claim._completeValues() )
Second Pass through, object passed to my invariant function is of type:
claim: <as.claim.claim.claim object at 0x3591770>
Call stack is:
debug_call [publish.py:114]
__call__ [form.py:773]
update [form.py:754]
success [form.py:598]
handle_edit_action [forms.py:23] (This is my action being called
now!)
modify [claim.py:42] (At this point in the code, the
as.claim.claim.claim object has been modified with the contents of the
form)
validateInvariants [interface.py:583]
claimInvariants [interfaces.py:39]
My question is: In order to not have the variants checked before my data
is prepped, should I really be using a form.EditForm as the base, or
some other class?
Many thanks in advance, and a happy new year
Adam
More information about the Zope3-users
mailing list