Then what's wrong with just doing:
widget=lambda field, value, row=row: lazy_options_widget(field=field,
on_key='no_table_master_field__selected',
off_key='master_field__unselected',
where=lambda master_field: (db.lookuptable.master_field == row.master_field
),
trigger=request.vars.master_field,
orderby=
db.lookuptable.id,
...
)
Anthony
On Friday, February 7, 2014 9:29:29 AM UTC-5, Richard wrote:
>
> Kind of...
>
> Richard
>
>
> On Thu, Feb 6, 2014 at 6:14 PM, Anthony <[email protected]
> <javascript:>>wrote:
>
>> Don't have time to process all this, but are you saying you have a row
>> object and just need to know how to pass it to a custom widget?
>>
>>
>> On Thursday, February 6, 2014 4:14:26 PM UTC-5, Richard wrote:
>>>
>>> Hello,
>>>
>>> I may ask something not realistic, I didn't think that much to this...
>>>
>>> But I found my self, I would really need to know the value of another
>>> fields the than the field on which the widget is apply in other to init my
>>> widget correctly. I found a workaround that would be as easy as passing the
>>> value of those fields as a vars in the URL, but I feel that it is hacky
>>> compare to having acces to row from widget, like reprensent...
>>>
>>> Just to be more specific... I use this widget, from s-cubism sqlab :
>>>
>>> https://github.com/BuhtigithuB/sqlabs/blob/patch-
>>> 1/modules/plugin_lazy_options_widget.py
>>>
>>> That I modify to fix issue with initialisation on update form... The
>>> thing is, that my fix is far from perfect, since the conditionnal field
>>> (the one on which the widget have been declared) is not filtered out, only
>>> the proper value for the conditionnal field is selected as it should on
>>> form update...
>>>
>>> So, I thougt, that I can fix this like that :
>>>
>>> Defining another _get_select_el function (maybe not required, but for
>>> now let use it) :
>>>
>>> def _get_select_el_for_init(self, trigger, value=None):
>>> if trigger:
>>> self._require.orderby = self.orderby or self._require.orderby
>>> self._require.dbset = self._require.dbset(self.
>>> where(trigger))
>>> options = self._require.options()
>>> opts = [OPTION(v, _value=k) for (k, v) in options]
>>> return DIV(SELECT(_id='%s__aux' % self._el_id, value=value,
>>>
>>> _onchange='jQuery("#%s").val(jQuery(this).val());'
>>> % self._hidden_el_id,
>>> *opts))
>>> else:
>>> return self.default
>>>
>>> Then
>>>
>>> I can do that :
>>>
>>> if value:
>>> el = DIV(script_el,
>>> SPAN(self._get_select_el_for_
>>> init(trigger=self.conditional_field_value, value=value),
>>> # SELECT(value=value,
>>> # _id='%s__aux' % self._el_id,
>>> #
>>> _onchange='jQuery("#%s").val(jQuery(this).val());'
>>> % self._hidden_el_id,
>>> # *[OPTION(v, _value=k) for (k, v) in
>>> field.requires.options()],
>>> # ),
>>> _id=self._disp_el_id),
>>> INPUT(_value=value, _type='hidden',
>>> _name=field.name, _id=self._hidden_el_id,
>>> requires=field.requires),
>>> _id=self._el_id)
>>> else:
>>> el = DIV(script_el,
>>> SPAN(select_el or self.default,
>>> _id=self._disp_el_id),
>>> INPUT(_value=value, _type='hidden',
>>> _name=field.name, _id=self._hidden_el_id,
>>> requires=field.requires),
>>> _id=self._el_id)
>>>
>>> Instead of what is commented out...
>>>
>>> self.conditional_field_value contain the id selected in the "master"
>>> field.
>>>
>>> It would requires that I could do something like that :
>>>
>>> widget=lambda field, value, row: lazy_options_widget(field=field,
>>>
>>> on_key='no_table_master_field__selected',
>>>
>>> off_key='master_field__unselected',
>>>
>>> where=lambda master_field: (db.lookuptable.master_field ==
>>> row.master_field),
>>>
>>> trigger=request.vars.master_field,
>>> orderby=
>>> db.lookuptable.id,
>>> ...
>>> )
>>>
>>> Does it make any sens or what?
>>>
>>> I can just do that instead :
>>>
>>> if value:
>>> el = DIV(script_el,
>>> SPAN(self._get_select_el_for_init(trigger=
>>> *current.request.vars.conditional_field_value*, value=value),
>>> # SELECT(value=value,
>>> # _id='%s__aux' % self._el_id,
>>> #
>>> _onchange='jQuery("#%s").val(jQuery(this).val());'
>>> % self._hidden_el_id,
>>> # *[OPTION(v, _value=k) for (k, v) in
>>> field.requires.options()],
>>> # ),
>>> _id=self._disp_el_id),
>>> INPUT(_value=value, _type='hidden',
>>> _name=field.name, _id=self._hidden_el_id,
>>> requires=field.requires),
>>> _id=self._el_id)
>>>
>>> And passing the vars into the URL...
>>>
>>> Thanks
>>>
>>> Richard
>>>
>> --
>> 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] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
--
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/groups/opt_out.