我正在尝试检索存储在DataStore中的已保存Message对象的列表。我收到了这个错误:
追踪(最近的呼叫最后):
文件“C:\ Program Files (86)\谷歌\ google_appengine \谷歌\ AppEngine上\分机\ webapp__init __。PY” 第515行,致电 handler.get(* groups)文件“C:\ Users \ Sergio \ Downloads \ python-test \ python-test \ gae_test \ handlers.py”, 第23行,在得到 messages = data.get_messages()文件 “C:\用户\塞尔吉奥\下载\蟒测试\蟒测试\ gae_test \ data.py”, 第12行,在get_messages中 dbMessage = db.GqlQuery(“SELECT * FROM Message ORDER BY author DESC”)
文件“C:\ Program Files (86)\谷歌\ google_appengine \谷歌\ AppEngine上\分机\ db__init __。PY” 第2296行,在 init 中 model_class = class_for_kind(self._proto_query._entity) 文件“C:\ Program Files (86)\谷歌\ google_appengine \谷歌\ AppEngine上\分机\ db__init __。PY” 第266行,在class_for_kind中 提出KindError('没有实现种类\'%s \''%种类)KindError:没有 善意'消息'的实现
也许有经验的人可以解释该异常的含义。
这是我的代码:
class MainHandler(BaseHandler):
def get(self):
messages = data.get_messages()
return self.render('index.html', messages=messages)
#This is in data.py
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class Message(object):
def __init__(self, body, author, email, phone):
self.body = body
self.author = author
self.email = email
self.phone = phone
def get_messages():
#TODO: Implement
dbMessage = db.GqlQuery("SELECT * FROM Message ORDER BY author DESC")
messages = []
for message in dbMessages:
messages.append(message)
return messages
#return [
# Message('Hey, how are you doing?', 'Joel Hodgson', 'joel@hogson.com', '847-555-1020'),
# Message('Hey there! Love the website.', 'Brian Gordy', 'bg@gordoindustries.com', None),
# Message('What is this?', 'Linda Bleeker', None, '415-555-5555'),
#]
#This is in Index.html:
{% extends "base.html" %}
{% block title %}Messages{% endblock %}
{% block content %}
<h2>Leave a new message</h2>
{% include "create.html" %}
<h2>Existing Messages</h2>
<div id="list">
{% include "list.html" %}
</div>
{% endblock %}
#And this in list.html
<ul id="messages">
{% for message in messages %}
<li>
{{ message.author }}: "{{ message.body }}"
<span class="contact-info">{{ message.phone }} • {{ message.email }}</span>
</li>
{% endfor %}
</ul>
我做错了什么?
谢谢!
答案 0 :(得分:2)
您可能错过了导入。
要执行gql查询,必须导入它引用的实际模型。
答案 1 :(得分:2)
这是因为在执行查询时尚未加载模型类(在本例中为“消息”)。我在你粘贴的代码段中没有看到它 - 确保它已包含在内,并在执行查询之前导入。
答案 2 :(得分:1)
我没有看到代表Message的元素的Message Class
插入此内容,如果已插入,请通知我
from google.appengine.ext import db
class Message(db.Model):
author = db.StringProperty()
body= db.StringProperty()
phone= db.StringProperty()
email = db.StringProperty()
和offcourse应该在DataStore中检索消息
因此您应该使用put方法插入消息,例如在post方法
中的此方案中
message = Message()
message.author = "the author"
message.body = "the body"
message.phone ="phone number"
message.email = "email"
message.put()
答案 3 :(得分:0)
看起来你的Message类没有扩展db.Model或ndb.Model。
此外,这是一个品味问题,我更喜欢使用Message.query()来获取Message类型的所有对象而不是GQL查询。
检查我写的库的测试代码:
模型定义位于:https://github.com/rbanffy/appengine-fixture-loader/blob/master/tests/multi_level_tests.py#L15-L34
&#34; SELECT * FROM Person&#34;等价物:https://github.com/rbanffy/appengine-fixture-loader/blob/master/tests/multi_level_tests.py#L56