2013-03-27 58 views
1

我有这样的事情:GAE NDB structuredproperty

class Book(ndb.Model): 
    date=ndb.DateProperty() 
    title=ndb.StringProperty() 
    content=ndb.TextProperty() 

class User(ndb.Model): 
    username=ndb.StringProperty() 
    name=ndb.StringProperty() 
    city=ndb.StringProperty() 
    books=ndb.StructuredProperty(Book, repeated=True) 

的想法是有几个用户和每个用户有几个不同的书籍。

一旦我有用户对象:

user=User.query(User.username=="pepo").get() 

我可以很容易地获得用户的书籍列表:

user.books 

,但是,我怎么能得到的,例如,在列表按该用户的日期排列的书籍?或者一般来说,任何关于结构化特性的查询,但与我alrealdy拥有的用户有关。

回答

4

拥有用户对象后,可以将books属性视为普通列表。排序,你可以这样做:

sorted_books = sorted(user.books, lambda x: x.date) 

你会在内存中,而不是通过查询来排序(虽然我相信你可以按结构化属性上User查询的结果,它不会有对属性本身的排序有任何影响,只是返回User对象的顺序)。

有关如何在Python中对列表进行排序的更多信息,请查看this article