Могу ли я заставить свойство модели Appengine вызывать функцию?

StackOverflow https://stackoverflow.com/questions/2329333

Вопрос

Я внедряю главную страницу с "горячими" историями, основанную на определенном алгоритме ранжирования.Однако я не могу понять, как передать хранилищу данных 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?

Это было полезно?

Решение

Нет встроенного свойства, которое обрабатывало бы это, но есть библиотека, этыкун, который реализует DerivedProperty и другие связанные свойства, которые делают то, что вы хотите. Вот статья о том, как это работает.

Другие советы

Я не думаю, что это возможно с App Engine так, как вы его описываете, но я думаю, что можно достичь того, чего вы хотите.Вы хотите, чтобы хранилище данных запускало вашу функцию ранжирования по каждому элементу в хранилище данных каждый раз, когда вы выполняете запрос.Это не очень масштабируемо, так как у вас могут быть миллионы объектов, которые вы хотите ранжировать.

Вместо этого у вас должно быть просто целочисленное свойство с именем rank, и вы должны устанавливать его каждый раз, когда вы обновляете объект.Затем вы можете использовать это свойство в своем предложении order.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top