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