Puis-je faire une propriété modèle AppEngine appeler une fonction?
-
22-09-2019 - |
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?
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.