2013-11-21 61 views
1

我正在爲Google App Engine上的Django應用程序編寫一些單元測試。測試通過調用init_datastore_v3_stub來使用數據存儲區存根,並在其中存儲一些測試數據。對於簡單的模型,這工作正常,但是當我存儲模型B這是模型A的子類時,我只會得到結果,如果我查詢模型爲A。示例代碼:GAE數據存根存根問題

class A(db.polymodel.PolyModel): 
    ... 
class B(A): 
    .... 
B().put() 

print A.all().count() # prints 1 
print B.all().count() # prints 0 

注意,在生產線都將打印1. 有什麼建議?

更新: 似乎問題不是與數據庫本身相關,而是與PolyModel實現無關。我注意到B._entity不包含'class'值,因爲它應該包含'_class'。它看起來像:

print B._entity # prints {... '_class'=[u'A', u'B'] ...} 

這解釋了我得到的結果。 當我手動設置'class'價值,一切正常:

b = B() 
b._entity['class'] = b._entity['_class'] 
b.put() 

print B.all().count() # prints 1 

我將繼續進行調查,並更新在這裏,當我找到原因的問題。

+1

您可能會遇到最終的結果。在查看其他問題之前,您需要排除這一點。 –

+0

感謝@TimHoffman的評論。我試圖在打印前添加「sleep(10)」,結果仍然相同。我還能做些什麼來排除最終的一致性? – Tzach

+0

從剛剛放入的對象中獲取密鑰,然後調用get(),這將解決最終的一致性。 –

回答

0

找到了解決辦法我自己,這是我的代碼中的錯誤中,我意外覆蓋每個屬性的name屬性爲場地的類成員的名字,這是_classPolyModelclass財產。這發生在爲測試創建模擬模型的過程中,這就是爲什麼我在生產中沒有這個問題。