It did the trick, thanks Anthony!

By the way the difficult part for me was building the list containing all 
ids from multiple tables.
Assuming ids are unique across tables (which was my case), this function 
can help build the IS_IN_SET validator :

def mix(list_long, list_short):
    i,j = iter(list_long), iter(list_short)
    result = [item for sublist in zip(i,j) for item in sublist]
    result += [item for item in i]
    result += [item for item in j]
    return result

On Friday, May 23, 2014 11:39:33 PM UTC+2, Anthony wrote:
>
> I suppose you could just make it type='integer'. Then you could use the 
> IS_IN_SET validator and construct a list of id's from the two tables 
> (keeping in mind you should de-dup the list, as both tables will have many 
> of the same id's). Of course, if you end up storing a value of say, 5, you 
> won't know if it is referencing record #5 in the melon table or record #5 
> in the watermelon table.
>
> Anthony
>
> On Friday, May 23, 2014 5:24:49 PM UTC-4, Louis Amon wrote:
>>
>> Well in this particular case I needn't know wether I'm storing a melon or 
>> a watermelon's id.
>>
>> I know it's kind of idiotic but I just need a 'fruit' id.
>>
>> Think of it as a subclassing matter : the API I'm connecting to is doing 
>> something along the lines of subclassing anyway, and I need to store data 
>> about every transaction my program does with this poorly-designed API
>>
>> Le 23 mai 2014 à 23:03, "Anthony" <abas...@gmail.com <javascript:>> a 
>> écrit :
>>
>> How would you know whether the field stores an id of the melon table or 
>> the watermelon table?
>>
>> On Friday, May 23, 2014 4:52:58 PM UTC-4, Louis Amon wrote:
>>>
>>> Due to external constraints, I need to define two tables that are 
>>> actually siblings and a third table's field that can choose from any of 
>>> said tables.
>>>
>>> e.g.:
>>> db.define_table('melon')
>>> db.define_table('watermelon')
>>>
>>> I need the third table's field to be a reference to either of the two 
>>> first tables.
>>>
>>> Is there a way to define this in terms of field type and validators ?
>>> I was thinking along the lines of:
>>>
>>> db.define_table('my_table', Field('fruit_id', type=???, 
>>> requires=IS_IN_DB(db, db.melon, _or=IS_IN_DB(db, db.watermelon)))
>>>
>>> or maybe:
>>>
>>> db.define_table('my_table', Field('fruit_id', type=???, 
>>> requires=any([IS_IN_DB(db, db.melon), IS_IN_DB(db, db.watermelon)]))
>>>
>>> But of course it doesn't work...
>>>
>>>
>>> How can I work around this issue ?
>>>
>>>  -- 
>> 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 a topic in the 
>> Google Groups "web2py-users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/web2py/nd6ED9oScsA/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> web2py+un...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>

-- 
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