uhm .... that code will put down your db as soon as "material" gets a few 
lines .... a better way is to fetch the latest id using orderby and limit

new_id = db(db.material.id>0).select(db.material.id, 
orderby=~db.material.id, limitby=(0,1)).first()
new_id = new_id and new_id + 1 or 1

But.....if you need a serial_no that basically is equal to the id of that 
table, you have two better (at least for my point of view) options....

db.define_table('material',
 .....
 .....
   Field("serial_no", "id")
)

or just use the id and name the column in the grid as "serial_no" passing 
the colnames in the headers parameters of the grid....

headers = {'material.id' : "Serial No"}

On Monday, February 11, 2013 10:09:12 AM UTC+1, Pankaj Pathak wrote:
>
> Good noon to all,
>
> Is there any technic to set serial no in SQLGRID, i have try following 
> code for it but i am not satisfied,
> db.define_table("material", 
>                 Field("serial_no", writable=False,),
>                 Field("material_type", requires=IS_IN_SET(['Capax', 
> 'Opax']), default = "Capax"),
>                 Field("code"),
>                 Field("description"),
>                 Field("unit"),
>                 Field("price"),
>                 ) 
> material_table_ids = [i.id for i in db(db.material).select()]             
>    
> db.material.serial_no.represent = lambda id,row: 
> material_table_ids.index(row and row.id or material_table_ids[-1])+1     
>         
>

-- 

--- 
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/groups/opt_out.


Reply via email to