【问题标题】:Google App engine: No key_name attributeGoogle App 引擎:没有 key_name 属性
【发布时间】:2014-06-20 17:28:37
【问题描述】:

我正在尝试了解 GAE 是如何工作的,大多数东西都在工作,但由于某种奇怪的原因,这段代码输出了一个

AttributeError: 'User_Account' object has no attribute 'key_name'

以下是相关的两个代码摘录:

class User_Account(ndb.Model):
    name = ndb.StringProperty()
    firstname = ndb.StringProperty()


class AddUser(webapp2.RequestHandler):

    def get(self):
        test_user = User_Account(name = "snow", firstname ="jon", key_name="jon")

我已经用 db 和 ndb 模型试过了,这两种方法都行不通...

提前感谢您的任何回答。

更新:这是“完整”代码(我删除了所有其他不必要的部分):

import webapp2
import cgi
from google.appengine.ext import ndb


MAIN_PAGE_HTML = """\
<html>
  <body>
    <br/>
    <a href="/add_user"> Add a user </a>
  </body>
</html>
"""

class Comment(ndb.Model):
    content = ndb.StringProperty()

class User_Account(ndb.Model):
    name = ndb.StringProperty()
    firstname = ndb.StringProperty()
    comments = ndb.KeyProperty(repeated=True)


class AddUser(webapp2.RequestHandler):
    def get(self):
        test_user = User_Account(name = "jon", firstname ="snow", key_name="jon")
        self.response.write(test_user.key_name + "<br/>")

        test_user.put()

        self.response.write("User added")

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.write(MAIN_PAGE_HTML)


application = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/add_user', AddUser)
], debug=True)

MOAR 编辑: 即使是这个非常简单的代码,在开发控制台中执行时也会输出错误

import os
import pprint

from google.appengine.ext import ndb

class Comment(ndb.Model):
    content = ndb.StringProperty()


test_comment = Comment(content="Hello world", key_name="hello")
test_comment.put()

【问题讨论】:

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


【解决方案1】:

请阅读ndb Model 类的文档。特别是在模型构造函数参数上。 https://developers.google.com/appengine/docs/python/ndb/modelclass#Constructor

你会看到它需要id,而不是than key_namekey_namedb api 的构造函数参数。

【讨论】:

  • 谢谢,现在可以了。我买了一本关于 GAE 的书,主要是关于旧的“db”模块 api(o'reilly 版)......因为我在官方文档中找不到任何真实的例子,我有点退回到旧的此功能已真正记录在案。
  • 谷歌把我带到了这个问题(和答案)。我在同一本书中的相同示例代码中遇到了同样的问题。
【解决方案2】:

我有一个类似情况的解决方案,我想要一个实体的 key_name(只有 key_name 而没有 ID)。我能够从 self.key().name() 属性中找到 key_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多