Actually, that will not work since it modifies the collection in a
loop. Try this:

def unique_items_widget(f,v):
    inp = SQLFORM.widgets.options.widget(f,v)
    options = inp.elements('option')
    vals = []
    inp.components = []
    for opt in options:
        val = opt['_value']
        if not val in vals:
            vals.append(val)
            inp.append(opt)
    return inp

On Jun 8, 10:18 pm, "mr.freeze" <[email protected]> wrote:
> mdpierro is just saying that a simple patch needs to be made to
> IS_IN_DB.  Until then, you can create a widget to remove duplicates:
>
> def unique_items_widget(f,v):
>     inp = SQLFORM.widgets.options.widget(f,v)
>     vals = []
>     for k, opt in enumerate(inp):
>         if not opt['_value'] in vals:
>             vals.append(opt['_value'])
>         else:
>             del inp[k]
>     return inp
>
> vul.authors.name.widget = unique_items_widget
>
> On Jun 8, 8:49 pm, kike <[email protected]> wrote:
>
> > In what part of the sentence
> > vul.authors.name.requires=IS_IN_DB(vul,vul.authors.name) I need
> > aggregate a groupby option to work, because in that sentence that
> > parameter is incorrect and if I aggregate a groupby parameter in
> > f=SQLFORM.factory(vul.authors.name) nothing append.
> > How I can fixed that
> > thank for your help
>
> > On Jun 8, 1:39 am, mdipierro <[email protected]> wrote:
>
> > > haha. I think we need to add a groupby option to IS_IN_DB.
>
> > > On Jun 7, 5:16 pm, kike <[email protected]> wrote:
>
> > > > Hi I need a form to search, and in that form a field with some
> > > > database values, I wrote the following
>
> > > > vul.authors.name.requires=IS_IN_DB(vul,vul.authors.name)
> > > >         f=SQLFORM.factory(vul.authors.name)
>
> > > > that work perfect but my problems is in my database exist several
> > > > authors with the same name, and that code list all of them, how I show
> > > > only one of all of the same name.
>
> > > > thank for your help
>
>

Reply via email to