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

Reply via email to