Невозможно извлечь из Datastore разные виды, используя один и тот же оператор GQL Select .
Другим вариантом будет использование ReferenceProperty для создания отношения многие-к-одному между UsersRSS
и Files
, рефакторинг вашего кода следующим образом:
class UsersRSS(db.Model):
userId = db.IntegerProperty()
file = db.ReferenceProperty(Files)
added = db.DateTimeProperty(auto_now_add=True)
class Files(db.Model):
fileHash = db.StringProperty()
title = db.StringProperty()
file = db.BlobProperty()
added = db.DateTimeProperty(auto_now_add=True)
items = UsersRSS.gql("WHERE userId = :userId ORDER BY date DESC LIMIT 10", userId=user_id)
Таким образом, свойства Files
будут автоматически разыменовываться с использованием точечной нотации item.file.title
:
for item in items:
print item.UserID
print item.Added
print item.file.title #This costs an additional RPC call to Datastore
Чтобы сохранить приложение от RPC-ссылки ReferenceProperty, загляните в вечнозеленую статью Предварительная выборка ReferenceProperty .