Как вы относитесь к ReferenceProperty как к логическому значению в AppEngine Datastore? - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть модель, которая может ссылаться на другую модель и дата которой завершена.

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 голосов
/ 26 сентября 2011

Единственный способ сделать это, как вы заметили, добавить логическое свойство, которое указывает, установлено 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
...