GAE Python Data Moddeling/ Querying: свойство ссылочной сущности

У меня есть сценарий, подобный этому, и я пытаюсь найти лучшее / наиболее распространенное решение:

class Car(db.Model):
  peopleCapacity = db.IntegerProperty()

class Wheel(db.Model):
  car = db.ReferenceProperty(reference_class=Car, collection_name='wheels')
  diameter = db.IntegerProperty()  

Я хочу результаты этого вида запроса:

smallWheelsForBigCars = db.GqlQuery(
  'SELECT * FROM Wheel WHERE diameter < 10 AND car.peopleCapacity > 6'        
)
# returns 0 entities as properties like 'car.peopleCapacity' are apparently not supported

Некоторые (хакерские) решения, которые я рассмотрел:

  • Делайте ограничения для колеса и автомобиля отдельно и вручную проверяйте пересечения (медленно!)
  • Сохраните копию car.peopleCapacity в Wheel с помощью computedProperty. (Плохо, так как мне нужно обновить все колеса, прикрепленные к машине, когда люди меняют емкость автомобиля. И да, в моем случае "peopleCapacity" изменится)

Мои две очереди:
Почему car.peopleCapacity не работает в запросах?
Есть ли лучшие подходы к этому?

1 ответ

Решение

Ваши выводы верны, хранилище данных не имеет возможности запроса подчиненного свойства (это можно сделать с помощью StructureProperty, но не так, как вы ищете).
Вы должны денормализовать вашу модель и поместить все в большую сущность, ее будет сложно обновить, но будет проще и быстрее получить результаты.

Другие вопросы по тегам