These two statements are incompatible:

db.unit.course.readable = db.unit.course.writable = False
db.unit.name.requires = [IS_NOT_EMPTY(),
IS_NOT_IN_DB(db(db.unit.course==request.vars.course), db.unit.name)]

because unit.course it not in the form therefore there is no
request.vars.course. You must set the latter in the controller action
that processes the form, before it does so, to the id of the current
course.

On Aug 10, 5:48 pm, davosmith <d...@davosmith.co.uk> wrote:
> I'm not quite sure what I'm doing wrong here, I'm trying to set up the
> validation so that you cannot have two units in the same course with
> the same name (but allow units in different courses to have the same
> name):
>
> db.define_table('unit',
>     Field('course', db.course),
>     Field('name', required=True),
>     Field('description', 'text'),
>     Field('specification', 'upload'),
>     Field('created_on', 'datetime', default=request.now),
>     Field('created_by', db.auth_user, default=auth.user_id),
>     format='%(name)s')
>
> db.unit.created_on.readable = db.unit.created_on.writable = False
> db.unit.created_by.readable = db.unit.created_by.writable = False
> db.unit.course.readable = db.unit.course.writable = False
> db.unit.name.requires = [IS_NOT_EMPTY(),
> IS_NOT_IN_DB(db(db.unit.course==request.vars.course), db.unit.name)]
>
> If I try to create two units with the same name, in the same course,
> then the validation (incorrectly) allows me to do so. If I remove the
> section '(db.unit.course==request.vars.course)', then the validation
> works, but restricts the unit name to only appearing once ever, rather
> than per course.
>
> Does anyone have any helpful suggestions (I am very new to web2py - I
> only started looking at it a couple of days ago).

Reply via email to