IS_IN_DB now has a groupby.  Give that a try.

On Jul 20, 12:00 pm, Kenneth <kenneth.t.lundst...@gmail.com> wrote:
> I almost got it to work with IS_IN_DB
>
>     form_fields.append(Field('new_seller', 'integer',
> requires=IS_IN_DB(db((db.tracker_person_product.troop_person ==
> db.troop_person.id) \
>             &(db.tracker_person_product.troop == troop.id) \
>             &(db.tracker_person_product.campaign == campaign.id)),
> 'troop_person.id','%(name)s%(surname)s' )))
>
> But could not find a way to use the distinct sql switch to sort out
> all doubles.
>
> So instead I had to do it like this:
>
>     ids = []
>     names = []
>
>     for person in new_persons:
>         ids.append(person.id)
>         names.append(str(person.name + " " + person.surname))
>
>     form_fields = []
>     form_fields.append(Field('new_seller', 'integer',
> requires=IS_IN_SET(ids, names)))
>
> Kenneth
>
> On Jul 19, 8:16 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > It would be great to have an app like pastebin for web2py models,
> > possibily using some convention to allow cooperation, and organized by
> > sector.
>
> > On Jul 19, 1:51 am, Kenneth <kenneth.t.lundst...@gmail.com> wrote:
>
> > > Here is the model för tracker_person_product that tracks sellings, if
> > > a person doesn´t have a entry in the tracker on an specific campaign
> > > he doesn´t belong to that campaign.
> > > Troop_person is the table where sellers a stored and well campaign is
> > > the campaign table.
>
> > > db.define_table('tracker_person_product',
> > >     db.Field('troop', db.troop, required=True),
> > >     db.Field('troop_person', db.troop_person, required=True),
> > >     db.Field('campaign', db.campaign, required=True),
> > >     db.Field('product', db.product, required=True),
> > >     db.Field('count_received', 'integer', required=True,
> > > requires=IS_INT_IN_RANGE(0, 1000000)),
> > >     db.Field('count_sold', 'integer', required=True,
> > > requires=IS_INT_IN_RANGE(0, 1000000)),
> > >     db.Field('count_returned', 'integer', required=True,
> > > requires=IS_INT_IN_RANGE(0, 1000000)),
> > >     db.Field('count_paid', 'integer', required=True,
> > > requires=IS_INT_IN_RANGE(0, 1000000)),
> > >     db.Field('edited_by', db[user_table], required=True),
> > >     db.Field('edited_date', 'datetime', required=True))
>
> > > db.define_table('troop_person',
> > >     db.Field('name', 'string', required=True),
> > >     db.Field('troop', db.troop, required=True),
> > >     db.Field('troop_group', db.troop_group, required=True),
> > >     db.Field('reward_selected', 'integer', default=0),
> > >     db.Field('edited_by', db[user_table], required=True),
> > >     db.Field('edited_date', 'datetime', required=True),
> > >     db.Field('surname', 'string', required=False))
>
> > > db.define_table('campaign',
> > >     db.Field('title_fi', 'string', requires=IS_NOT_EMPTY()),
> > >     db.Field('title_se', 'string', requires=IS_NOT_EMPTY()),
> > >     db.Field('starts', 'date', requires=IS_DATE(format=T('%Y-%m-%d'),
> > > error_message=T('must be YYYY-MM-DD!'))),
> > >     db.Field('ends', 'date', requires=IS_DATE(format=T('%Y-%m-%d'),
> > > error_message=T('must be YYYY-MM-DD!'))),
> > >     db.Field('description_fi', 'text'),
> > >     db.Field('description_se', 'text'),
> > >     db.Field('hidden', 'boolean'),
> > >     db.Field('district', db.district, default=0),
> > >     db.Field('created_by', db[user_table], required=True),
> > >     db.Field('created_date', 'datetime', required=True),
> > >     db.Field('edited_by', db[user_table], required=True),
> > >     db.Field('edited_date', 'datetime', required=True),
> > >     db.Field('main', 'boolean', default=False))
>
> > > When polulating the tracker table form I use
>
> > >     person_data = db((db.tracker_person_product.troop_person ==
> > > db.troop_person.id)
> > >         &(db.tracker_person_product.troop == troop.id) \
> > >         &(db.tracker_person_product.campaign == campaign.id)) \
> > >         .select(db.troop_person.ALL, orderby=db.troop_person.name,
> > > distinct=True)
>
> > > and when I want to find sellers not in the campaign I use
>
> > >     person_data = db((db.tracker_person_product.troop_person ==
> > > db.troop_person.id)
> > >         &(db.tracker_person_product.troop == troop.id) \
> > >         &(db.tracker_person_product.campaign != campaign.id)) \
> > >         .select(db.troop_person.ALL, orderby=db.troop_person.name,
> > > distinct=True)
>
> > > Kenneth
>
> > > On Jul 19, 2:40 am, "mr.freeze" <nat...@freezable.com> wrote:
>
> > > > You could probably do it with IS_IN_DB depending on your model. I
> > > > would personally create a widget since they are more flexible and
> > > > intuitive to me. If you show your model then I can help you.
>
> > > > On Jul 18, 6:27 pm, Kenneth <kenneth.t.lundst...@gmail.com> wrote:
>
> > > > > Hello,
>
> > > > > I have a case where I have a table of sellers, a table of campaigns
> > > > > and then a tracker to follow how much each seller is selling. All
> > > > > sellers are not in all campaigns, the tracker keeps track of witch
> > > > > seller belongs to which campaign.
>
> > > > > To adminitrate this I´m trying to make a drop down list where I could
> > > > > select one och multiple sellers not in the campaign and add them to
> > > > > the campaign.
>
> > > > > Is this possible with SQLFORM or SQLFORM.factory or any other ready
> > > > > function or do I have to make something myself?
>
> > > > > Kenneth
>
>

Reply via email to