2010-06-09 57 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的引用,但是你将它传递给你重写的那个新实例。

相关问题