如何在AppEngine数据存储区中将ReferenceProperty视为布尔值?

时间:2011-09-24 18:33:39

标签: google-app-engine google-cloud-datastore

我有一个可能引用另一个模型的模型,它有一个completed_on日期。

class Game(db.Model):
    challenge = db.ReferenceProperty(Challenge, required=False)
    completed_on = db.DateTimeProperty(default=None)

我希望能够选择在特定时间段之前完成的所有已完成的挑战赛。问题是我不能有2个不等式

  

但是http://code.google.com/appengine/docs/python/datastore/queries.html说:

     

仅在一个属性上允许不等于过滤器

这意味着我无法做challenge > '' and completed_on < datetime_value

但是我可以is_challenge=True and completed_on < datetime_value,只要我在数据库中添加一个名为is_challenge的新列。考虑到这一点,是否有人说服数据存储区将挑战视为布尔值?

似乎无法以这种方式完成,我希望还有其他方法可以实现这一目标,而无需向模型添加另一个列,并且可能还有另一个索引与该列一起使用。

我希望游戏列表足够大,不想在python中为每个显示的页面过滤它。

1 个答案:

答案 0 :(得分:0)

执行此操作的唯一方法是,如您所见,添加一个布尔属性,指示是否设置了challenge。您可以使用ComputedProperty

轻松完成此操作
class Game(db.Model):
    challenge = db.ReferenceProperty(Challenge, required=False)
    completed_on = db.DateTimeProperty(default=None)

    @db.ComputedProperty
    def has_challenge(self):
      return self.challenge is not None