ndb モデルにクラス メソッドがあり、「ユーザー」(問題ありません) と「業界」でフィルタリングしています。
問題は、エンティティRecommendationには業界プロパティがなく、Stock の KeyProperty である Stock プロパティがあり、Stockには業界プロパティがあることです。
get_last_n_recommendations_for_user_and_industryメソッドを修正して、業種 (株式の KeyProperty) でフィルタリングするにはどうすればよいですか??
class Industry(ndb.Model):
name = ndb.StringProperty()
...
class Stock(ndb.Model):
name = ndb.StringProperty()
industry = ndb.KeyProperty(kind=Industry)
...
@classmethod
def get_industry(cls):
return cls.query(cls.ticker == cls).get().industry
class Recommendation(ndb.Model):
user = ndb.KeyProperty(kind=User)
stock = ndb.KeyProperty(kind=Stock)
...
@classmethod
def get_last_n_recommendations_for_user_and_industry(cls, stock_key, user_key, n):
return cls.query(
cls.user == user_key,
cls.stock.get().industry == ndb.Key('Stock', stock_key.string_id()).get().industry
)
.fetch(page_size)
これを行うと、次のエラーが発生します。
AttributeError: 'KeyProperty' object has no attribute 'get'