KindError: Свойство r должно быть экземпляром SecondModel, почему? - PullRequest
0 голосов
/ 09 июня 2010
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))

ошибка:

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 ]

0 голосов
/ 09 июня 2010

теперь все в порядке:

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 голосов
/ 09 июня 2010

Код, который вы показываете, не должен даже компилироваться - вы не можете создать экземпляр ссылочного свойства с классом, который еще не определен - если у вас нет другого определения SecondModel где-то, что вы не включили, в этом случае проблема в том, что FirstModel имеет ссылку на исходную SecondModel, но вы передаете ему экземпляр нового, с которым вы перезаписали его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...