In grid you can also do ...
if 'new' in request.args:
db.sometable.is_active.readable =\
db.sometable.is_active.writable =\
False
query=db.othertable.otherfield==avalue
db.sometable.foreign_key.requires =\
IS_IN_DB(db(query), 'othertable.otherfield' ...)
# even more
# for those times when the grid default form isn't sufficient
form = SQLFORM(db.sometable, .....)
if form.accepts(...) #old method, I know
yada
yada
return dict(form=form)
Haven't tried this in smartgrid yet.
On Nov 9, 4:26 pm, Massimo Di Pierro <[email protected]>
wrote:
> grid takes any query (even a join)
> smartgrid takes a table but (can) follow linked tables (no joins).
>
> On Nov 9, 3:19 pm, Jim Steil <[email protected]> wrote:
>
>
>
>
>
>
>
> > From what I can gather, smartgrid is the same as grid except that it
> > will also display/work with related tables. Grid works with one table
> > only (please correct me if I'm wrong).
>
> > -Jim
>
> > On 11/9/2011 3:14 PM, Richard V�zina wrote:
>
> > > Thank a lot Jim I will play a bit with your example... Pretty helpful...
>
> > > I would like to know more about the difference between grid and
> > > smartgrid... I just start to read the sqlhtml.py to understand better
> > > new grid and smartgrid...
>
> > > Thanks again.
>
> > > Richard
>
> > > On Wed, Nov 9, 2011 at 4:07 PM, Jim Steil <[email protected]
> > > <mailto:[email protected]>> wrote:
>
> > > Here is a sample of one of my controllers.
>
> > > @auth.requires_permission('select', db.priceTemplate)
> > > def priceTemplates():
> > > response.view='list.html'
> > > table = db.priceTemplate
> > > response.title = '%s - %s' % (response.section, table['_plural'])
> > > columns = ['priceTemplate.name', 'priceTemplate.plantId',
> > > 'priceTemplate.iwhsPosition',
> > > 'contactPriceTemplate.contactId']
>
> > > # Setup Permissions
> > > editable = auth.has_permission('update', table)
> > > create = auth.has_permission('create', table)
> > > deletable = auth.has_permission('delete', table)
> > > details = auth.has_permission('read', table)
>
> > > orderby = dict(priceTemplate=[db.priceTemplate.name
> > > <http://db.priceTemplate.name>])
>
> > > db.contactPriceTemplate._plural = 'Contacts'
>
> > > db.contactPriceTemplate.priceTemplateId.writable = False
> > > db.contactPriceTemplate.priceTemplateId.readable = False
>
> > > grid = SQLFORM.smartgrid(db.priceTemplate, columns=columns,
> > > orderby=orderby,
> > > create=create, details=details,
> > > editable=editable, deletable=deletable,
> > > csv=False, search_widget=None,
> > > paginate=15, maxtextlength=45)
> > > return dict(grid=grid)
>
> > > In it I'm setting read/write capabilities for one of the fields
> > > (notice that it isn't a field in the primary table, but a related
> > > table. I'm also using standard auth to test for permissions
> > > (thanks Anthony). I can control sorting for primary table and
> > > related tables. In looking at the method signature for
> > > SQLFORM.grid it appears that formstyle will work just like it did
> > > for CRUD. From what little I know, it would appear to me that the
> > > CSS styling is the same as CRUD so your CSS should work.
>
> > > SQLFORM.smartgrid is amazing. If you have your models setup
> > > properly you can get highly sophisticated CRUD forms, with
> > > relationships with very little boilerplate code. Thanks Massimo!
>
> > > -Jim
>
> > > On 11/9/2011 2:55 PM, Richard wrote:
>
> > > Hello,
>
> > > I would like to know I can control generated form with
> > > SQLFORM.grid...
> > > I use to do extensively :
>
> > > If user and group and permission and row field value:
> > > crud.table.field.readable =\
> > > crud.table.field.writable =False
> > > form = crud.create, read or update(db.table)
>
> > > And I customize my form a bit with CSS (crud.settings.formstyle =
> > > 'divs') so I would like to know if I can recycle my CSS with
> > > SQLFORM.grid??
>
> > > Thanks.
>
> > > Richard