0

Utilisation des classes de modèle suivant: ndbComment trier par attribut d'une propriété clé dans Google Cloud/Python?

class Product(ndb.Model): 
    name = ndb.StringProperty() 
    barcode = ndb.StringProperty() 

class Donation(ndb.Model): 
    user= ndb.UserProperty() 
    product = ndb.KeyProperty(kind=Product) 

Lorsque vous utilisez une requête telle que:

donations = Donation.query().order(Donation.product).fetch(1000) 

Comment puis-je trier le résultat par donationsProduct name ou barcode?

+0

'Donation.query(). Order (Donation.product) .order (Don.nom) .fetch (1000)' – stovfl

+0

Essayez de trier par code. trié (dons, clé = lambda d: d.product) – janscas

Répondre

1

Vous ne pouvez pas faire une telle requête, du moins pas avec le magasin de données. L'ordre de tri ne peut être qu'une des propriétés du modèle d'entité respectif. Chaque requête nécessite un ou plusieurs datastore correspondant indexes. Pour les requêtes ordonnées, vous avez besoin de composite indexes, défini dans le fichier index.yaml. Chacun de ces index a exactement un kind dans sa définition, vous ne pouvez pas mélanger plusieurs types d'entités (Donation avec Product dans votre cas).

Si vous avez besoin ces requêtes vous pouvez dupliquer les informations nécessaires et remplir lorsque vous mettez à jour la propriété product. En outre, si/quand les propriétés respectives de Product changent, vous devrez peut-être mettre à jour toutes les entités Donation en le référençant. Un terrain d'entente peut-être acceptable serait d'utiliser la valeur réelle de la propriété product (la clé elle-même) pour commander la requête - au moins, tous les dons liés à la même entité de produit seraient regroupés.