I think I'm overlooking something simple here, I can't imagine this is impossible to do.
I want to filter by a datetime attribute and then order the result by a ranking integer attribute. When I try to do this:
query.filter("submitted >=" thisweek).order("ranking")
I get the following:
BadArgumentError: First ordering property must be the same as inequality filter property, if specified for this query; received ranking, expected submitted
Huh? What am I missing?
Thanks.
I used another trick, which worked out simply because of the format I needed my data in (a list of dicts). In this case I run the datetime-based query, create dicts from the returned ents, and then sort by the numeric 'counter' property. Reversing the sort gave me a descending order. Keep in mind I only requested 10 results, on a fairly small datastore.
Example result:
I don't know since when, but current SDK may return subtle different error:
In my case, I could work around the error with this:
Edited 2013-02-08: As Horselover Fat mentioned in a comment, it only avoids an error.
The datastore isn't capable of ordering a query that contains an inequality by any property other than the one used in the inequality.
This can often be worked around by adding a property that can be filtered with an equality; in this case, it may be possible to have a BooleanProperty tracking whether an entity is from the current week, and update it for all entities at the end of each week.
The simplest way would be to split your query:
The Datastore has some limitations on queries. One is not allowing to combine inequality filter on one property with order on anther property. You can find more restrictions here:
https://cloud.google.com/appengine/docs/python/ndb/queries