[BlueBream] disabling zope.schema constraint check in edit form

Michael Howitz mh at gocept.com
Thu Aug 18 06:46:48 EDT 2011

Am 18.08.2011 um 09:59 schrieb Joshua Immanuel:
> Hello all,
> I use the zope.schema field's constraint parameter to check for the
> uniqueness of a particular field like this
>        class IMyObject(Interface):
>                def check_for_uniqueness(value):
>                        cat = getUtility(ICatalog)
>                        results = cat.searchResults(object_name=value)
>                        for rslt in results:
>                                if rslt.name.lower() == value.lower():
>                                        raise NameAlreadyExists(value)
>                        return True
>                name = TextLine(title=u'Name', required=True,
>                		constraint=check_for_uniqueness)
>                ...
> This goes well with the zope.formlib's AddForm.

As the value does not exist yet.

> But in edit form if I
> modify any other field other than the 'name' field I get the
> 'NameAlreadyExists' error.

As you find the object which you are editing in the catalog.

> Worse case scenario is where I have a cancel
> action button which just redirects to another page, that too screams for
> the NameAlreadyExists error.
> Is there a way to disable the constraint check in the EditForm if the
> 'name' field isn't modified?

Make sure your catalog search does not return the object you are currently editing.

> What is the preferred way of doing these kind of checks?

Some time a ago I wrote a blog post about objects with attributes which are unique in their container [1].
Besides it is written in German you might get the clue from the code examples.

[1] http://blog.gocept.com/zope3-objekte-mit-eindeutigen-titeln-innerhalb-eines-ordners

Mit freundlichen Grüßen
Michael Howitz · mh at gocept.com · Softwareentwickler
gocept gmbh & co. kg · Forsterstraße 29 · 06112 Halle (Saale) · Deutschland
http://gocept.com · Tel +49 345 1229889 8 · Fax +49 345 1229889 1
Zope- und Plone-Beratung und -Entwicklung

More information about the bluebream mailing list