GAE数据存储存根问题

时间:2013-11-21 12:38:54

标签: python django google-app-engine google-cloud-datastore

我正在为Google App Engine上的Django应用编写一些单元测试。测试通过调用init_datastore_v3_stub来使用数据存储区存根,并在其中存储一些测试数据。对于简单模型,这可以正常工作,但是当我存储模型B作为模型A的子类时,如果我将模型查询为A,我只会得到结果。示例代码:

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

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

请注意,在制作中,两行都会打印1。 有什么建议吗?

更新: 似乎问题与db本身无关,而是与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 :(得分:0)

我自己找到了解决方案,这是我的代码中的一个错误,我不小心将每个属性的name属性覆盖为字段的类成员名称,{{1}为_class class的属性。这是在为测试创建Mock模型期间发生的,这就是为什么我在生产中没有这个问题。