2010-08-19 42 views
0

我在與數據存儲試圖複製一個左連接,以找到模型項沒有在B型車的匹配關係的問題:谷歌應用程序引擎的Python問題

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

您無法使用「屬性爲null」過濾器查詢項目。但是,你可以一個布爾屬性添加到頁面信號,如果有項目或不:

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

然後覆蓋項目的「放」的方法來翻轉標誌。但是,你可能想在頁面模型來封裝此邏輯(也許Page.add_item(個體經營,* 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

你有沒有嘗試這樣的:

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

應該工作。

+0

不,這是行不通的。 – Craig 2010-08-19 12:59:54

+0

也嘗試過.filter(「item_set.count()=」,0) 在這兩種情況下都沒有返回(應該返回其中一條記錄)。 – Craig 2010-08-19 13:02:17

1

數據存儲不支持連接,因此您無法使用單個查詢來完成此操作。您需要對A中的項目進行查詢,然後對每個項目執行另一個查詢以確定它是否具有B中的任何匹配項目。

+0

好的,我認爲在數據存儲中會有一種方法可以做到這一點,謝謝。 – Craig 2010-08-19 19:19:50

相關問題