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 · m...@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

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to