我有模特
class Foo(ndb.Model):
x = ndb.IntegerProperty()
class Bar(ndb.Model):
foo = ndb.StructuredProperty(Foo, repeated=True)
我一直在最近,在尝试保存Bar实体时,仅在生产中,这个错误:
BadValueError: Expected Foo instance, got Foo(x=100)
我记得不久前看到这个错误,然后它消失了。这是什么原因?
答案 0 :(得分:1)
问题是我在我保存模型的文件中使用models.py的相对导入,所以不知何故python认为Foo与Foo不同,因为它们位于不同的包中。我将模型导入更改为绝对导入,现在它正常工作。
答案 1 :(得分:0)
您所描述的最小版本:
from google.appengine.ext import ndb
import webapp2
class Foo(ndb.Model):
x = ndb.IntegerProperty()
class Bar(ndb.Model):
foo = ndb.StructuredProperty(Foo, repeated=True)
class Doit(webapp2.RequestHandler):
def get(self):
bar = Bar(foo=[Foo(x=100)])
k = bar.put()
self.response.write('Wrote %s' % k)
app = webapp2.WSGIApplication([
('/', Doit),
], debug=True)
正如预期的那样,运行得很好。请添加重现问题所需的最少量代码,否则您无法帮助我们。 (理想情况下,编辑您的问题以包含一个简单,完整的应用程序来重现您的问题,并通过对此答案的评论让我知道您已经这样做了 - 谢谢!)。
顺便提一下,我注意到在主题中你提到了LocalStructured
,但是在你问题的代码中,你实际上是在使用StructuredProperty
- 我在这里展示的代码就像好吧,如果使用LocalStructuredProperty
而不是StructuredProperty
,无论如何,但是,你会很高兴澄清歧义,谢谢。