我遇到了数据存储区的问题,试图复制左连接以查找模型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)
我想找到任何没有相关项目的网页。
答案 0 :(得分:3)
您无法使用“property is null”过滤器查询项目。但是,您可以向Page添加一个布尔属性,如果它有项目则发出信号:
class Page(db.Model):
url = db.StringProperty(required=True)
has_items = db.BooleanProperty(default=False)
然后覆盖Item的“put”方法以翻转标志。但您可能希望将此逻辑封装在Page模型中(可能是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 :(得分:1)
数据存储区不支持联接,因此您无法使用单个查询执行此操作。您需要查询A中的项目,然后为每个项目执行另一个查询,以确定它是否在B中有任何匹配的项目。
答案 2 :(得分:-1)
你有没有尝试过:
Page.all().filter("item_set = ", None)
应该工作。