Hello Hans -

On Mon, Mar 23, 2009 at 5:23 PM, Hans <
johann.scheibelho...@easytouch-edv.com> wrote:

>
> Massimo and web2py.experts,
>
> After initial successful tests with web2py we are trying to get the
> first 'little' enterprise application done with it. And like
> enterprises do we need to life with extensive use of multi column
> unique keys. Despite reading through various threads on this we could
> not get it working already with a 'simple' 2 column unique key. Either
> we loose the "drop box" option/functionality or we can't use it as one
> column of a multi column unique key. See the last 3 lines of the
> following code example. I'm sure someone here can share a working
> example of how to implement such a basic enterprise requirement in
> web2py code.
>
> Beyond that I would appreciate help on how a good code for a 3 column
> unique key would be implemented (a good example would be shapename
> +colorname+month below).
>
> Thanks,
> Hans
>
> db=SQLDB('sqlite://test.db')
>
> db.define_table('shape',
>  SQLField('name'),
>  migrate='shape.table')


>
> db.define_table('color',
>  SQLField('name'),
>  migrate='color.table')
>
> db.define_table('shapecolor',
>  SQLField('shapename'),
>  SQLField('colorname'),
>  SQLField('month','date',requires=IS_DATE('%Y-%m')),
>  migrate='shapecolor.table')


You probably mean to have these be a table holding many-to-many
relationships.  If so, these should be references (that is, they should
implement foreign keys), something like this:

db.define_table('shapecolor',    # note every web2py table by default
creates a unique field, 'id'
  SQLField('shape_id', db.shape),
  SQLField('color_id', db.color ))
# I leave the date off just because the way you have it is ok...
#  I only want to show correction where I think there is a problem


>
> db.shapecolor.shapename.requires=IS_IN_DB(db,db.shape.name,'%(name)
> s')
>

Now, since a reference to another table is a reference to a row id, here is
how
this should look:

  db.shapecolor.shape_id.requires=IS_IN_DB(db, db.shape.id, %(name)s )

Here is how this "reads":

   shape_id  must be the same as shape.id, and shape.id must exist
  (but, from that row, display db.shape.name as a string, instead of
shape.id)

Try to re-phrase all of the following in a similar way, recognizing that the
foreign
key is a reference to another table's 'id' field (and so the IS_IN_DB test
will also be
against the id of that table) --- display the name for selection, as you
have.

Let us know how it goes.

Regards,
Yarko


> # 1st try
> db.shapecolor.colorname.requires=IS_IN_DB(db,db.color.name,'%(name)
> s'),IS_NOT_IN_DB(db
> (db.shapecolor.shapename==request.vars.shapename),'shapecolor.colorname')
> #<<< this breaks db.color.name dropdown
> # 2nd try
> db.shapecolor.colorname.requires=[IS_IN_DB(db,db.color.name,'%(name)
> s'),IS_NOT_IN_DB(db
> (db.shapecolor.shapename==request.vars.shapename),'shapecolor.colorname')]
> #<<< this breaks db.color.name dropdown as well
> # 3rd try
> db.shapecolor.colorname.requires=IS_IN_DB(db,db.color.name,'%(name)
> s')  #<<< dropdown working but no multi column unique key!
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to