If you want to have strict DB-constraints, you can:
db.define_table('barcode',
Field('code', type='string', unique=True, notnull=True), #
*consider
just 'code', not 'barcode'* - it's necessary to prevent possible
hard-to-catch bugs during SQLFORMs processing
format='%(code)s'
)
db.define_table('bursary_users',
...
Field('barcode', type='reference barcode', notnull=True,
unique=True),
...)
db.define_table('bursary_entries',
db.bursary_users.barcode.clone(), # - .clone() is
undocumented, but why?
Field('entry_date', type='datetime', default=request.now,
readable=False, writable=False),
format='%(barcode)s'
)
#be careful - *above code could break your existing db-tables *
# this solution require additional logic to process insert in bursary_
users, look for One form for multiple tables
def new_user():
#this would be invoked before insert in db.bursary_users
def reg_bar_code(form):
new_code = form.vars.pop('code', None) #get user input for
db.barcode.code
#any additional logic goes here
form.vars.barcode = db.barcode.insert(code = new_code) # returns
id of new_code
# so, form.vars.barcode would be used to insert in db.bursary_
users.barcode
db.bursary_users.barcode.writable = False
db.barcode.code.label = 'barcode' #
form=SQFORM.factory(db.barcode, db.bursary_users)
if form.process(onvalidation = reg_bar_code).accepted:
db.bursary_users.insert(**db.bursary_users._filter_fields(form.
vars))
On Saturday, October 15, 2016 at 5:08:13 PM UTC+3, James Booth wrote:
>
> Ah okay. It should only be done via. A validated form anyway but I see the
> potential risk. Is the other option to set the barcode as the PK in my
> bursary_users table and 'reference' it?
>
--
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.