Могу ли я заставить свойство модели Appengine вызывать функцию?
-
22-09-2019 - |
Вопрос
Я внедряю главную страницу с "горячими" историями, основанную на определенном алгоритме ранжирования.Однако я не могу понять, как передать хранилищу данных Appengine мою собственную функцию сортировки (как я могу в python с помощью sort(key=ranking_function)).Я хочу что-то вроде этого:
class Story(db.Model):
user = db.ReferenceProperty(User)
text = db.TextProperty()
def ranking(self):
# my ranking function, returns an int or something
return 1
ranking = property(ranking_function)
Чтобы я мог позже позвонить:
Story.all().order("ranking").limit(50)
Есть идеи, как это сделать, используя модели хранилища данных Appengine?
Другие советы
Я не думаю, что это возможно с App Engine так, как вы его описываете, но я думаю, что можно достичь того, чего вы хотите.Вы хотите, чтобы хранилище данных запускало вашу функцию ранжирования по каждому элементу в хранилище данных каждый раз, когда вы выполняете запрос.Это не очень масштабируемо, так как у вас могут быть миллионы объектов, которые вы хотите ранжировать.
Вместо этого у вас должно быть просто целочисленное свойство с именем rank, и вы должны устанавливать его каждый раз, когда вы обновляете объект.Затем вы можете использовать это свойство в своем предложении order.