Запрос Google App Engine (не фильтр) для дочерних объектов сущности

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

Вопрос

Доступны ли дочерние элементы сущности в запросе?

Данный:

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()

Предположим, 500 фабрик произвели 500 продуктов, в общей сложности 250 000 продуктов.Есть ли способ сформировать ресурсоэффективный запрос, который будет возвращать только 500 продуктов, произведенных одним конкретным заводом?Метод-предок является фильтром, поэтому, используя, например.Product.all().ancestor(factory_1) потребует повторных вызовов хранилища данных.

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

Решение

Хотя предок описывается как «фильтр», на самом деле он просто обновляет запрос, добавляя условие предка.Вы не отправляете запрос в хранилище данных, пока не выполните итерацию запроса, поэтому то, что у вас есть, будет работать нормально.

Однако есть один небольшой момент:500 сущностей с одним и тем же родителем могут ухудшить масштабируемость, поскольку записи сериализуются для членов группы сущностей.Если вы просто хотите отслеживать фабрику, производящую продукт, используйте ReferenceProperty:

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

Затем вы можете получить все продукты, используя:

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