说我有两种实体类型:
class image(db.Model):
url = db.LinkProperty()
date= db.DateTimeProperty()
class video(db.Model):
url = db.LinkProperty()
date= db.DateTimeProperty()
每个人可能都有其他一些(不重要的)属性。
我想要做的是以某种方式合并查询:
i = image.gql('ORDER BY date LIMIT 10')
v = video.gql('ORDER BY date LIMIT 10')
这样我就会留下一个GqlQuery
对象,结果好像image
和video
一样。
是否可以不做类似的事情:
merged = ([a for a in i] + [b for b in v]).sort(key=lambda x: x.date)[:10]
留下一个实际的GqlQuery
对象而不是一个实体列表将是一个加号,虽然我拥有后者需要的一切。
答案 0 :(得分:1)
继承和不同类的唯一方法是使用PolyModel然后你的类层次结构
class Media(db.Model):
url = db.LinkProperty()
date= db.DateTimeProperty()
class Image(Media):
pass
class Video(Media):
pass
然后在GQL中,最好是Query对象
获取所有媒体类型
query = Media.query().order(Media.date)
获取视频
query = Video.query().order(Video.date)
或者没有不同的课程。拥有一个Media类和一个表示媒体类型的字段。
PolyModel的文档可以在这里找到 - https://developers.google.com/appengine/docs/python/ndb/polymodelclass