Thanks M. Di Pierro

I was not expecting an answer so fast.

I will give that a try but I can not remove the unique clause from the DBMS 
because other apps (PHP and PERL) also have access to it.

Regard's

D. Lafrance

Le vendredi 27 juin 2014 02:20:26 UTC-4, Massimo Di Pierro a écrit :
>
> I would not do it that way. There are two places to enforce uniqueness: at 
> the database level and at the form level.
>
> To enforce is at the database level you can manually do 
>
> create table sometable (
>     a_field varchar(10),
>     b_field timestamp default date(now()),
>     unique(a_field, b_field)
> );
>
> and in web2py:
>
> db.define_table('sometable',
>                 Field('a_field', 'string', length=10),
>                 Field('b_field','datetime', default=request.now),
>                 migrate=False
> )
>
> so web2py will take the table as in database. This still will not enforce 
> uniqueness in forms.
>
> To enforce uniqueness in forms, the problem is, you need to specify how is 
> the error to be reported. Let's say you want the b field to report the 
> error. You can do this in the action, before SQLFORM...
>
> def index():
>      if request.post_vars.b_field:
>          db.sometable.b_field.requires = 
> IS_NOT_IN_DB(db(db.sometable.a_field==
> request.post_vars.a_field),'b_field')
>      form = SQLFORM(db.sometable).process()
>      ....
>
>
>
>
>
> On Thursday, 26 June 2014 12:32:17 UTC-5, Daniel Lafrance wrote:
>>
>> Hi gang
>>
>> I am quite new to web2py and i am confronted to the following lack of my 
>> own knowledge.
>>
>> In other DB engine one can write :
>>
>> create table sometable (
>>     a_field varchar(10),
>>     b_field timestamp default date(now()),
>>     unique(a_field, b_field)
>> );
>>
>> wich I have reproduce in web2py using the following syntax:
>>
>> # coding: utf8
>> db.define_table('sometable',
>>                 Field('a_field', 'string', length=10),
>>                 Field('b_field','datetime', default=request.now),
>>                 Field('unique_fields','text',compute=lambda s: 
>> str(s.a_field) + str(s.b_field), unique=True)
>>                 )
>> db.sometable.requires = IS_NOT_IN_DB(db, 'sometable.unique_fields')
>>
>> Written as is it works and I get a ticket when I try to create duplicate.
>>
>> My question is : 
>>
>> In some posts it is being said not to put the "unique=True" for the 
>> unique field.
>> I have tried it, (after deleting all databases files created by web2py) 
>> and the IS_NOT_IN_DB clause does not seem to work.
>>
>> Any idea of what I am doing wrong ?
>>
>> Regard's
>>
>> Daniel L
>>     
>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to