1

時,我有模特App Engine的BadValueError節省NDB LocalStructured實體

class Foo(ndb.Model): 
    x = ndb.IntegerProperty() 

class Bar(ndb.Model): 
    foo = ndb.StructuredProperty(Foo, repeated=True) 

我不斷收到最近,試圖挽救酒吧實體時,只有在生產,這個錯誤:

BadValueError: Expected Foo instance, got Foo(x=100) 

我記得前一陣子看到這個錯誤,然後消失了。這是什麼原因?

+0

嘗試'ndb.KeyProperty(Kind ='Foo',重複= True)' –

+1

但是不會KeyProperty只保存對Foo實體的引用,而不是整個Foo實體?爲什麼比StructuredProperty更好?到目前爲止,它與StructuredProperty一起工作良好,所以如果我改變模型,我也將不得不回填,這使事情變得複雜。 – user3526468

+0

你有超過一個名爲Foo的班級嗎? – Greg

回答

0

問題是我使用相對導入的models.py在我保存模型的文件中,所以不知何故python認爲Foo與Foo不同,因爲它們位於不同的包中。我改變了模型導入是絕對導入,現在它工作正常。

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,無論如何,但仍然,這將是很好的澄清含糊不清,謝謝。

相關問題