I think you're right, @Niphlod.
I didn't note this.
@jw, tell us how you solved it, ok?
--
Vinicius Assef
On 07/26/2012 12:52 PM, 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 <
http://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 <
http://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 <
http://db.card.id>)))
>
> cards2learn.exclude(lambdarow: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
> <
http://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 <
http://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
> <
http://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!
>
> --
>
>
>