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.

Reply via email to