Forget the precedent email... I think I found how, it didn't work the first
time I try, so I just put everything into string, maybe I had problem with
a comma...
inputs_list = []
for a in field1_names_dict:
inputs_list.append(Field(field1_names_dict[a]['field1_name']+'_f1',
type='boolean', widget=SQLFORM.widgets.checkboxes.widget,
requires=IS_EMPTY_OR(IS_IN_SET([assay_names_dict[a]['field1_name_ui']]))))
inputs_list.append(Field(field1_names_dict[a]['field1_name']+'_f2',
db.ref_tab1, requires = IS_EMPTY_OR(IS_IN_DB(db,'ref_tab1.id
','%(REPRESENTFIELD)s'))))
inputs_list.append(Field(field1_names_dict[a]['field1_name']+'_f3',
db.ref_tab2, requires = IS_EMPTY_OR(IS_IN_DB(db,'ref_tab2.id
','%(REPRESENTFIELD)s'))))
I I just have to add the formstyle in the SQLFORM.factory call :
form = SQLFORM.factory(*inputs_list, formstyle='divs')
On Thu, Jun 28, 2012 at 11:47 AM, Richard Vézina <
[email protected]> wrote:
> Hello Anthony,
>
> If I don't use eval(), should I use web2py dummy table, I don't see how I
> will be able to build dummy table dynamically and declare it as inputs_list
> to be use with the asterisk... If I just put a asterisk in front of my
> actual generated inputs_list it not working since the item in the list are
> text. I don't see how I can insert Field into the list without generating
> them as strings...
>
> I will read a bit the links you sent.
>
> Thanks.
>
> Richard
>
>
> On Thu, Jun 28, 2012 at 11:29 AM, Anthony <[email protected]> wrote:
>
>> I wounder what should be the best way to alter a form generated by
>>> SQLFORM.factory in a way where fields will be placed into a html table a 3
>>> columns.
>>>
>>> So each 3 fields I need to insert a "tr" and each field need to be in a
>>> "td"...
>>>
>>
>> You might want to create a custom form layout in the view:
>> http://web2py.com/books/default/chapter/29/7#Custom-forms. That way you
>> can still use SQLFORM.factory to handle all the widget creation and
>> processing, but you can present the fields however you want. You might also
>> check out plugin_solidform <http://dev.s-cubism.com/plugin_solidform>.
>>
>> formstring = "SQLFORM.factory(" +','.join(inputs_list)+")"
>>>
>>> form = eval(formstring)
>>>
>>
>> No need to eval code like that in Python. If you have a list of objects
>> you want to submit as separate args to a function, just precede the list
>> with an asterisk:
>>
>> form = SQLFORM.factory(*input_list)
>>
>> In that case, you can change the way you define the Field items in the
>> list -- make them actual Field() objects rather than just strings of code.
>>
>> Note, for keyword arguments, you can submit a dictionary preceded by two
>> asterisks:
>>
>> some_function(**some_dictionary)
>>
>> Anthony
>>
>
>