Your lev_fields_dict is not a dictionary but a set object (if you use curly
braces without providing both keys and values separated by colons, you get
a set). Neither sets nor dictionaries preserve order. In any case, you
don't need a set -- just use a list (replace the curly braces with brackets
to create a list comprehension).
Also, from a security perspective, it is dangerous to eval() code submitted
by users -- don't do it. In fact, you don't need eval in any of the places
you have used it. Instead of:
eval('db.%s'%request.vars.lev_table)
You can do:
db[request.vars.lev_table]
Anthony
On Tuesday, August 12, 2014 6:16:57 AM UTC-4, Richard wrote:
>
> For updating a dynamically generated table I use a temporarily table and a
> SQLFORM on that table.
> This works fine except the sequence of the fields looks random to me.
>
> I use the following code:
>
> lev_fields_dict= {
> Field( "d"+str(eval('db.%s'%request.vars.lev_table)[
> date_row.id]['lev_date']).replace("-", ""),
>
> db.local_ev_def[db(db.local_ev.lev_table_name==request.vars.lev_table).select().first().local_ev_def].data_type,
> default=eval('db.%s'%request.vars.lev_table)[date_row.id
> ]['lev_value'],
> label = str(eval('db.%s'%request.vars.lev_table)[
> date_row.id]['lev_date'])
> )
> for date_row in
> eval('db(db.%s)'%request.vars.lev_table).select(
> eval('db.%s'%request.vars.lev_table).id,
>
> orderby=eval('db.%s'%request.vars.lev_table).id)
> }
>
> db.define_table('form_%s'%request.vars.lev_table, *lev_fields_dict)
> form = SQLFORM(eval('db.form_%s'%request.vars.lev_table))
>
> The fields in the temp table have random order. Does anybody know why?
> Thanks,
> Richard D
>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.