我正在为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
当我找到问题的原因时,我会继续调查和更新。
答案 0 :(得分:0)
我自己找到了解决方案,这是我的代码中的一个错误,我不小心将每个属性的name
属性覆盖为字段的类成员名称,{{1}为_class
class
的属性。这是在为测试创建Mock模型期间发生的,这就是为什么我在生产中没有这个问题。