I am working on a custom crud function.
In my model I have got the following table:
db.define_table('adres',
SQLField('bedrijf', db.bedrijf, default='', notnull=True),
SQLField('adressoort', length=30, default='Vestigingsadres',
notnull=True),
SQLField('straat', length=42, default='', notnull=True),
SQLField('huisnummer', length=6, default='', notnull=True),
SQLField('huisnummerextensie', length=6),
SQLField('postcode_cijferdeel', type='integer'),
SQLField('postcode_letterdeel'),
SQLField('plaats', length=42, default='', notnull=True),
migrate='adres.table')
db.adres.bedrijf.requires=IS_IN_DB(db, db.bedrijf.id, '%(bedrijfsnaam)
s')
db.adres.bedrijf.writable=False
db.adres.bedrijf.readable=False
db.adres.adressoort.requires=IS_IN_SET(['Statutair
vestigingsadres','Vestigingsadres','Postadres'])
db.adres.straat.requires=[IS_LENGTH(42,error_message=T('length exceeds
42')), IS_NOT_EMPTY()]
db.adres.huisnummer.requires=[IS_LENGTH(6,error_message=T('length
exceeds 6')), IS_NOT_EMPTY()]
db.adres.huisnummerextensie.requires=IS_LENGTH(6,error_message=T
('length exceeds 6'))
db.adres.postcode_cijferdeel.requires=IS_NULL_OR(IS_MATCH('\d
{4}',error_message=T('no match 4 digits')))
db.adres.postcode_letterdeel.requires=IS_NULL_OR(IS_MATCH('[A-Z]
{2}',error_message=T('no match 2 capitals')))
db.adres.plaats.requires=[IS_LENGTH(42,error_message=T('length exceeds
42')), IS_NOT_EMPTY()]
To enable the user to manage his OWN records in this table, I defined
the following function:
@auth.requires_login()
def crud_address():
form=crud.create(db.adres,onvalidation=lambda form:
form.vars.bedrijf=auth.user.bedrijf)
rows=db(db.adres.bedrijf==auth.user.bedrijf)\
.select
(db.adres.id,db.adres.adressoort,db.adres.straat,db.adres.plaats,orderby=db.adres.straat)
if form.accepts(form.vars,session):
response.flash = T('new record inserted')
elif form.errors:
response.flash = T('form has errors')
else:
response.flash = T('please fill the form')
return dict(form=form,rows=rows)
The user shouldn't be able to edit the adres.bedrijf field, therefore,
I defined the following validators:
db.adres.bedrijf.writable=False
db.adres.bedrijf.readable=False
The field adres.bedrijf isn't displayed, but doesn't get a value
either when I create a record (appadmin displays None). Whereas, I
thought
onvalidation=lambda form: form.vars.bedrijf=auth.user.bedrijf
would give adres.bedrijf the desired value. How do I solve this
problem?
Is it in this case possible to use SQLFORM to define the custom form?
I assume I will run into the same problem when defining an update
function...
Kind regards,
Annet.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---