2010-06-09 153 views
0
class FirstModel(db.Model): 
    p = db.StringProperty() 
    r=db.ReferenceProperty(SecondModel) 

class SecondModel(db.Model): 
    r = db.ReferenceProperty(FirstModel) 

class sss(webapp.RequestHandler): 
    def get(self): 
    a=FirstModel() 
    a.p='sss' 
    a.put() 
    b=SecondModel() 
    b.r=a 
    b.put() 

    a.r=b 
    a.put() 
    self.response.out.write(str(b.r.p)) 

的錯誤是:KindError:屬性r必須是SecondModel的實例,爲什麼?

Traceback (most recent call last): 
    File "D:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 511, in __call__ 
    handler.get(*groups) 
    File "D:\zjm_code\helloworld\a.py", line 158, in get 
    a.r=b 
    File "D:\Program Files\Google\google_appengine\google\appengine\ext\db\__init__.py", line 3009, in __set__ 
    value = self.validate(value) 
    File "D:\Program Files\Google\google_appengine\google\appengine\ext\db\__init__.py", line 3048, in validate 
    (self.name, self.reference_class.kind())) 
KindError: Property r must be an instance of SecondModel 

感謝

回答

-2

現在是確定:

class SecondModel(db.Model): 
    pass 

class FirstModel(db.Model): 
    p = db.StringProperty(choices=set(["aa", "bb", "cc"])) 
    r=db.ReferenceProperty(SecondModel) 

class SecondModel(db.Model): 
    r = db.ReferenceProperty(FirstModel) 
    s=db.StringProperty() 

class sss(webapp.RequestHandler): 
    def get(self): 
    #''' 
    a=FirstModel() 
    a.p='cc' 
    a.put() 
    b=SecondModel() 
    b.r=a 
    b.s='kkk' 
    b.put() 

    a.r=b.key() 
    a.put() 
    #''' 
    #a=FirstModel.all().filter('p =','cc').get() 
    #b=a.r 
    #self.response.out.write(a.secondmodel_set.filter('r = ', a).get().s) 
    self.response.out.write(b.r.p+'<br/>'+a.r.s) 
+0

它的定義之前,您不能引用'SecondModel'。如果你沒有從上面的代碼中得到錯誤,那麼你需要定義SecondModel兩次,而且事情幾乎肯定會以某種方式破壞。 – geoffspear 2010-06-09 13:14:34

+0

我更新了它,現在沒關係 – zjm1126 2010-06-10 00:56:34

0

告訴你應該甚至不應該編譯代碼 - 你不能實例化一個參考屬性與尚未定義一個類 - 除非你還有另外一個SecondModel的定義,你還沒有包括,在這種情況下,問題是FirstModel有一個對原始SecondModel的引用,但是你將它傳遞給你重寫的那個新實例。

相關問題