* can see two options.

1. Use form validation:


def check_user(form):
    query = db.site.user == form.vars.user
    query &= db.site.location == form.vars.location
    if db(query).count():*
*        form.errors.user = "already exists"

def action():
    form = SQLFORM(db.site)
    if form.process(onvalidation=check_user).accepted:
        # do whathever

2. Create a computed Uni-Key

*
*db.define_table('site',
    Field('location', 'string'),
    Field('user', db.auth_user, readable=False, writable=False),
    Field('typos', 'blob', readable=False, writable=False, default=None),
    Field('status', 'string', readable=False, writable=False,
default='pending'),
    Field('last_scan', 'datetime', readable=False, writable=False,
default=None),
    Field('unikey' , unique=True, notnull=True, compute=lambda row:
"%(user)d_%(location)s" % row
)


*
On Sun, Dec 30, 2012 at 4:06 AM, encompass <[email protected]> wrote:

> I have this in my model.
> db.define_table('site',
>     Field('location', 'string'),
>     Field('user', db.auth_user, readable=False, writable=False),
>     Field('typos', 'blob', readable=False, writable=False, default=None),
>     Field('status', 'string', readable=False, writable=False,
> default='pending'),
>     Field('last_scan', 'datetime', readable=False, writable=False,
> default=None)
> )
>
> db.site.status.requires = IS_IN_SET(['pending', 'working', 'done'])
> db.site.location.requires = IS_URL()
> I want it so that it validates that the combination of db.site.user and
> db.site.location are a unique value.  How do I do that in web2py?
> I assume there is a way to do this in the model file and now in a
> controller with checks before insert.
> BR,
> Jason
>
> --
>
>
>
>

-- 



Reply via email to