cards2learn.exclude(lambda row: row.userCard.lastTimeLearned > date.today() - timedelta(days=row.userCard.stage))
Niphlod, you made my day!! Thank you so much! And thank you all for the advices! On Thursday, July 26, 2012 5:52:29 PM UTC+2, Niphlod wrote: > > Currently you'd have to code a view in the database (or simply a "string" > condition to pass on) to achieve that. > > date.today() - timedelta(something) is a python "fixed" value that doesn't > get re-evaluated at runtime by the database substituting the "something" > for each value of every row. > > If you need the structure to be portable and absolutely need to have a > single query fetching all of this, you need to change your db structure. > > If you're going to run always on a "fixed" db engine you could write > something exploiting the functionalities of that db engine. > > Remember that most of the times is easier (and the resources negligible) > to fetch rows from the db and filter them with python. > > cards2learn = db((db.groupCards.card_id == db.card.id) \ > & (db.groupCards.studyGroup_id == auth.user.studyGroup_id) \ > & (session.chosenSubject_id == db.card.subject_id) \ > & (db.userCard.card_id == db.card.id) > & (db.userCard.stage <= 5) \ > #& (db.userCard.lastTimeLearned < (date.today() - > timedelta(days=(1)))) > ).select(db.userCard.ALL,db.card.ALL,db.groupCards.ALL, left=db. > userCard.on((db.userCard.card_id == db.card.id))) > > cards2learn.exclude(lambda row: row.usercard.lasttimelearned < request.now > - timedelta(days=row.usercard.stage)) > > > > > > should work. (totally untested) > > On Thursday, July 26, 2012 5:23:51 PM UTC+2, jw wrote: >> >> Ok guys... I did step for step and now the query works for the stage >> (progress). >> The second thing (stage is multiplicator for time) I have no glue how to >> move on. >> >> cards2learn = db((db.groupCards.card_id == db.card.id) \ >> & (db.groupCards.studyGroup_id == auth.user.studyGroup_id) \ >> & (session.chosenSubject_id == db.card.subject_id) \ >> & (db.userCard.card_id == db.card.id) >> & (db.userCard.stage <= 5) \ >> & (db.userCard.lastTimeLearned < (date.today() - >> timedelta(days=(1)))) >> ).select(db.userCard.ALL,db.card.ALL,db.groupCards.ALL, >> left=db.userCard.on((db.userCard.card_id == db.card.id))) >> >> timedelta(days=(1)) should be timedelta(days=(db.userCard.stage)) but it >> says: >> <type 'exceptions.TypeError'> unsupported type for timedelta days >> component: Field >> How do I use the db.userCard.stage in timedelta (stage is an integer >> field in the table)? >> >> Many thanks for the previous answers! >> > --

