Domanda

sono i figli di un'entità disponibili in una query?

Data:

class Factory(db.Model):
    """ Parent-kind """
    name = db.StringProperty()

class Product(db.Model):
    """ Child kind, use Product(parent=factory) to make """
    @property
    def factory(self):
        return self.parent()
    serial = db.IntegerProperty()

Assumere 500 fabbriche hanno fatto 500 prodotti per un totale di 250.000 prodotti. C'è un modo per formare una query efficiente delle risorse che restituirà solo i 500 prodotti realizzati da un particolare fabbrica? Il metodo antenato è un filtro, in modo da utilizzare ad esempio Product.all (). Antenato (Factory_1) richiederebbe ripetute chiamate al datastore.

È stato utile?

Soluzione

Anche se antenato è descritto come un "filtro", è in realtà solo aggiorna la query per aggiungere la condizione antenato. Non si invia una richiesta al datastore fino eseguire iterazioni su query, quindi quello che hai funzionerà bene.

Un piccolo problema però: 500 entità con lo stesso genitore può far male la scalabilità, dal momento che le scritture sono serializzati ai membri di un gruppo di entità. Se si desidera solo per monitorare la fabbrica che ha fatto un prodotto, utilizzare un ReferenceProperty:

class Product(db.Model):
   factory = db.ReferenceProperty(Factory, collection_name="products")

È quindi possibile ottenere tutti i prodotti utilizzando:

myFactory.products
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top