Проблема с питоном в Google App Engine - PullRequest
0 голосов
/ 19 августа 2010

У меня проблема с хранилищем данных, пытающимся реплицировать левое объединение, чтобы найти элементы из модели a, которые не имеют подходящего отношения в модели b:

class Page(db.Model):
    url = db.StringProperty(required=True)

class Item(db.Model):
    page = db.ReferenceProperty(Page, required=True)
    name = db.StringProperty(required=True)

Я хочу найти любые страницы, которые не имеют связанных элементов.

Ответы [ 3 ]

3 голосов
/ 20 августа 2010

Вы не можете запрашивать элементы, используя фильтр "свойство равно нулю". Тем не менее, вы можете добавить логическое свойство к странице, которое сигнализирует, есть ли у него элементы:

class Page(db.Model):
    url = db.StringProperty(required=True)
    has_items = db.BooleanProperty(default=False)

Затем переопределите метод put для Item, чтобы перевернуть флаг. Но вы можете инкапсулировать эту логику в модель страницы (возможно, Page.add_item (self, * args, ** kwargs)):

class Item(db.Model):
    page = db.ReferenceProperty(Page, required=True)
    name = db.StringProperty(required=True)

    def put(self):
        if not self.page.has_items:
            self.page.has_items = True
            self.page.put()
        return db.put(self)

Следовательно, запрос для страниц без элементов будет:

pages_with_no_items = Page.all().filter("has_items =", False)
1 голос
/ 19 августа 2010

Хранилище данных не поддерживает объединения, поэтому вы не можете сделать это с помощью одного запроса.Вам необходимо выполнить запрос для элементов в A, а затем для каждого сделать другой запрос, чтобы определить, есть ли у него какие-либо подходящие элементы в B.

0 голосов
/ 19 августа 2010

Вы пробовали это как:

Page.all().filter("item_set = ", None)

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...