【问题标题】:Appengine error object has no attribute '_key'Appengine 错误对象没有属性“_key”
【发布时间】:2012-09-11 10:40:26
【问题描述】:

我有一个如下所示的 GAE 数据库实体:

class Notification(db.Model):

    alert = db.StringProperty()
    type = db.StringProperty()
    status = db.StringProperty(default="unread", choices=set(["unread", "read"])) 
    created  = db.DateTimeProperty(auto_now_add=True)
    modified = db.DateTimeProperty(auto_now=True)
    entity = db.StringProperty()
    record = db.ReferenceProperty(model.RecordModel)
    actor = db.ReferenceProperty(model.Profile)
    account = db.ReferenceProperty(model.Account)

...我创建了一个这样的实体:

notify = model2.Notification(account=account)
notify.alert = message
notify.type = "reminder"
notify.actor = actor
notify.record = record
notify.put() 

此调用引发错误*'Notification' 对象没有属性'_key'*

nquery = db.Query(model2.Notification).filter('account =', self.session.account).order('-created')            
for n in nquery:
  try:
    _dict = {}
    _dict['serverID'] = str(n.key()) #- raises error! 

【问题讨论】:

    标签: google-app-engine python-2.7 google-cloud-datastore


    【解决方案1】:

    尝试:

    nquery = Notification.all().filter('account =', self.session.account).order('-created') 
    

    【讨论】:

    • 这会引发同样的错误。我什至尝试将实体重命名为“通知”以避免与 GAE 类发生任何可能的命名冲突,但仍然会引发相同的错误。当我注释掉“n.key()”时,错误消失了。这令人难以置信,因为我真的需要得到那个实体密钥!
    • 你能发布完整的回溯吗?那里可能有线索。
    【解决方案2】:

    我想我已经明白了!我的 Notification 类中的“实体”属性导致 python appengine 中的某种命名冲突。更改名称会删除“错误对象没有属性 '_key'”错误。算了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2014-05-14
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多