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 <abas...@gmail.com > <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 web2py+un...@googlegroups.com <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 web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.