我有一个模特
class Neighborhood(model) {
name = db.StringProperty(required=True)
city = EncodedProperty(encoder=_get_city_name)
}
我希望检索所有的邻居对象并通过" name"来对它们进行排序。和"城市"属性。最初,我试过
def retrieveAndSort()
query=Neighborhood.all()
query.order("name")
query.order("city")
return query
但经过一些进一步的研究后,似乎GAE不支持对EncodedProperty对象进行排序。然后,我尝试使用sort()
方法检索查询对象后在Python中对数据进行排序,但Query对象没有此方法。最后,我尝试使用sorted()
方法使用代码
neighborhoods = sorted(neighborhoods, key=attrgetter('city', 'name'))
它几乎奏效了。但是,数据似乎有些混乱,我收到了一些输出,如下所示。
Abu Dhabi - Al Maryah Island
Minneapolis - Montrose
Atlanta - Buckhead
Atlanta - Home Park
Atlantic City - Boardwalk
Atlantic City - Marina
...
California - Saint Helena
California - Yountville
New York City - Central Park
Charlotte - South End
Charlotte - Third End
...
我完全不知道为什么会发生这种情况,并希望得到任何可能的帮助。
修改 样本输出更短:
New York City - Meatpacking District
New York City - Brooklyn
New York City - Midtown West
答案 0 :(得分:0)
我认为您必须获取实体然后对其进行排序。
neighborhoods = Neighborhood.all().fetch(1000)
neighborhoods = sorted(neighborhoods, key=attrgetter('city', 'name'))
答案 1 :(得分:0)
问题被标记为gae-datastore,但“EncodedProperty”不是数据存储区属性类型。 https://cloud.google.com/appengine/docs/python/datastore/typesandpropertyclasses
模型应该是:
class Neighborhood(db.model):
name = db.StringProperty(required=True)
city = db.StringProperty(required=True)
然后您的查询功能可能只是:
def retrieveAndSort():
"""
Returns everything in Neighborhood model alphabetically
"""
query = db.GqlQuery('SELECT * FROM Neighborhood ORDER BY city DESC')
for place in query:
print "{0} - {1}".format(place.city, place.name)