[Grok-dev] unique item in container question

Souheil CHELFOUH trollfot at gmail.com
Tue Mar 17 08:09:34 EDT 2009


Yes, you should
This is not really grok related, it's more about the form system
Have a look at formlib, that will help you have a global picture !

- Trollfot

2009/3/17 modiadi <adi at modiadi.com>:
> Case closed !
>
> This is the solution, thanks !
>
> After searching this solution on grok dev and not finding it, I wonder
> if I miss some important informations about grok. Should I read or
> learn something else before grok(like zope3)?
>
>
> On Mar 17, 2009, at 1:38 PM, Christian Klinger wrote:
>
>> Hi again,
>>
>> another option is to use the validator on your grok.action.
>>
>> Look at this little snippet maybe it helps you.
>>
>>
>> ##################################################
>>
>>     def simple_validator(self, action, data):
>>         errors = self.validate(action, data)
>>         if object already there:
>>             errors = (u"Entry already exists",)
>>         return errors
>>
>>     @grok.action(u'Anlegen', validator=simple_validator)
>>
>> ##################################################
>>
>> Christian
>>
>>> Hi Christian,
>>>
>>> Thank you for the suggestion it is very helpful.
>>>
>>> I still have to find a way to make the form report the error. I that
>>> this issue is grok related.
>>>
>>> My problem becomes when the NameChoser rises a ValueError how can I
>>> make the form report the error to the user?
>>>
>>> At this moment if i do this :
>>>
>>>     @grok.action('Add event')
>>>     def add(self,**data):
>>>         .....
>>>         if self.context.has_key(name):
>>>             raise ValueError("some error")
>>> It will report the exception in zope error log. I need to find a way
>>> to inform the user about the problem so he can change the name (in
>>> the
>>> context of this application this is how we must handle the situation)
>>>
>>> Thank again
>>>
>>>
>>>
>>> On Mar 17, 2009, at 11:53 AM, Christian Klinger wrote:
>>>
>>>> Hi modiadi,
>>>>
>>>> in zope3 there is a concept called NamedChooser. You can look here
>>>> [1]
>>>> for the default implementation. Of course you can override the
>>>> NameChooser for your NewsContainer so you can check if the news item
>>>> already exists.
>>>>
>>>> There is an example in Philipp´s *Web Component Development with
>>>> Zope3*.
>>>>
>>>> Hope this helps
>>>> - Christian
>>>>
>>>> [1]
>>>> http://svn.zope.org/zope.container/trunk/src/zope/container/contained.py?rev=97508&view=auto
>>>>
>>>>
>>>>> Hello,
>>>>>
>>>>> I have a grok.AddForm wich adds a NewsItem in a NewsContainer. I
>>>>> try
>>>>> to write some kind of validation so I dont have duplicate news in
>>>>> the
>>>>> container.
>>>>>
>>>>> As I see I have 3 a few options:
>>>>>
>>>>> 1. Write an invariant in the NewsItem model where I check if the
>>>>> news
>>>>> is unique in the *container*. I don't see this as a good option
>>>>> because I have to explicitly refer to the container in side a
>>>>> model.
>>>>>
>>>>> 2. Write the validation in the Add grok.action. The idea is that
>>>>> just
>>>>> before adding the new item in the container I check if I have
>>>>> duplicates. This was easy to do.
>>>>>
>>>>> My problem is that I can't(or I don't know how to) return an
>>>>> error to
>>>>> the user from this place.
>>>>>
>>>>>    @grok.action('Add event')
>>>>>      def add(self,**data):
>>>>>          ...... do some validation
>>>>>      return None?
>>>>>
>>>>> Do you have any suggestions ?
>>>>>
>>>>> Thank you !
>>>> _______________________________________________
>>>> Grok-dev mailing list
>>>> Grok-dev at zope.org
>>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>>>
>>
>> _______________________________________________
>> Grok-dev mailing list
>> Grok-dev at zope.org
>> http://mail.zope.org/mailman/listinfo/grok-dev
>>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
>


More information about the Grok-dev mailing list