Yes, it would store the ids of the regions between vertical bars,
something like this: |4|7|23|. So say you are looking for the house-types
in China (which is id = 7). It would be something like this:
if you already have the record id no.7, then just this:
houses = db(db.house_types.regions.contains('|7|')).select()
Or, you might have the find the record no. first:
china_rec = db(db.regions.name == 'China').select(db.regions.id).first()
houses =
db(db.house_types.regions.contains('|'+str(china_rec.id)+'|')).select()
As long as your requirements are not too complex it seems to work well.
See also the book. DAL chapter, search for list:reference.
Regards, D
On Saturday, 14 April 2012 21:27:34 UTC+1, leftcase wrote:
>
> Hi David,
>
> Thanks for your reply.
>
> I did come across the list:reference option while trying to figure this
> out. I couldn't figure this out though:
>
> Say I add the following to my house-type table:
>
> Field('regions', 'list:reference region')
>
> If I generate a form using SQLFORM, it presents me with a multiselect
> region option where I can select as many regions as I need. Reading around,
> it seems that the region field would then store something like this for
> instance:
>
> 'england', 'france', 'US', 'china'
>
> How do I then create a query to show all house-type records with a region
> of 'china' for instance?
>
> I'm not an experienced user of development frameworks like this. Is it
> usually this difficult to accomplish this kind of thing? Seems to me it
> would be a pretty common requirement?
>
> Thanks in advance, :-)
>
> Chris
>
> On Sat, Apr 14, 2012 at 8:52 PM, villas wrote:
>
>> I would just mention that if you only have a few regions/housetypes, you
>> might consider de-normalising the data and using list:reference and work
>> with the jQuery.multiselect (if you have any problems with that, you might
>> like to read my other thread on the topic).
>> Best regards, David
>>
>> On Saturday, 14 April 2012 18:31:58 UTC+1, leftcase wrote:
>>>
>>> Hi all,
>>>
>>> I'm pretty new to web2py and web app development and I've spend some
>>> time trying to figure out the best way to do this.
>>>
>>> I have two tables, house-types and regions. A house-type can exist in
>>> many regions, and a region can have many house types:
>>>
>>> db.define_table(
>>> 'region',
>>> Field('name', 'string', length=512, required=True),
>>> format = '%(name)s')
>>>
>>> db.define_table(
>>> 'house-type',
>>> Field('title', 'string', length=512), #title of the newbuild
>>> property listing
>>> Field('vendor',db.vendor, required=True),
>>> Field('bedrooms', 'integer'),
>>> Field('price', 'double',required=True),
>>> Field('description', 'text',length=65536, required=True),
>>> Field('live', 'boolean', default=False)
>>> )
>>>
>>> If I understand correctly, in order to create the many-to-many
>>> relationship I should create a junction table like the following:
>>>
>>> db.define_table(
>>> 'houses_and_regions',
>>> Field('house', db.house-type),
>>> Field('region', db.region))
>>>
>>> And then I should use SQLFORM to construct a form which updates both
>>> house-type and houses_and_region tables when I create or modify a new house.
>>>
>>> What I'm struggling with is how to create a form which allows me to
>>> select multiple regions for a house. I wondered if anyone could give me any
>>> examples?
>>>
>>> Thanks in advance!
>>>
>>> Chris
>>>
>>
>