Question

Je suis une mise en œuvre frontpage avec des histoires « à chaud » à partir d'un certain algorithme de classement. Cependant, je ne peux pas comprendre comment passer le datastore Appengine ma propre fonction de tri (comme je peux en python avec tri (key = ranking_function)). Je veux quelque chose comme ceci:

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)

Alors que je peux appeler plus tard:

Story.all().order("ranking").limit(50)

Toute idée comment faire en utilisant les modèles datastore AppEngine?

Était-ce utile?

La solution

Il n'y a pas construit dans la propriété qui gère, mais il y a une bibliothèque, aetycoon , qui implémente DerivedProperty et d'autres propriétés connexes qui font ce que vous voulez. Voici un article sur la façon dont cela fonctionne.

Autres conseils

Je ne pense pas que ce soit possible avec App Engine comme vous le décrivez, mais je pense qu'il est possible d'obtenir ce que vous voulez. Vous voulez que le datastore pour exécuter votre fonction de classement contre tous les éléments du datastore, chaque fois que vous faites une requête. Ce n'est pas très évolutive, comme vous pourriez avoir des millions d'entités que vous souhaitez classer.

Au lieu de cela, vous devez simplement avoir une propriété entier appelé rang, et le mettre à chaque fois que vous mettez à jour une entité. Ensuite, vous pouvez utiliser cette propriété dans votre clause de commande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top