Поиск по связям моделей в Google App Engine? - PullRequest
1 голос
/ 25 мая 2010

У меня есть 2 модели:

class Parent (db.Model) :
  data = db.StringProperty()


class Child1 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData = db.StringProperty()

class Child2 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData2 = db.StringProperty()

class Child3 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData3 = db.StringProperty()

....

Я хочу запрос, который может дать мне список всех родителей, у которых еще нет ребенка. Как мне это сделать?

Я не хочу поддерживать идентификатор в родительской модели для каждого из дочерних элементов, поскольку я хочу очень часто добавлять новые дочерние модели.

1 Ответ

1 голос
/ 25 мая 2010

Правильный способ справиться с этим - сохранить в вашей родительской сущности количество детей. Затем вы можете просто запросить родителей, у которых количество детей равно 0.

Вам не нужно иметь дочерний идентификатор в родительской сущности; Вы хотите сохранить количество детей . Не обязательно важно, принадлежит ли ребенок к одному типу модели или другому. Цель сохранения этого подсчета состоит в том, что он позволяет решить вашу проблему, которая запрашивает бездетных родителей. В хранилище данных или объектах запросов AppEngine, которые предоставляют эту функцию, нет собственных возможностей.

Так как это изначально не поддерживается, у вас есть выбор сделать это одним из двух способов:

1) вести постоянный подсчет количества детей, увеличивая или уменьшая их при каждом добавлении или удалении ребенка;

2a) запрашивать КАЖДОГО потомка каждого типа и записывать уникальные значения родителя.

2b) запросить все родительские объекты и сопоставить их с уникальными родительскими идентификаторами из 2a

Я оставлю вам решать, какой подход является правильным.

...