Ошибка запуска в моем простом тесте Google App Engine - PullRequest
1 голос
/ 17 января 2011

Я пытаюсь получить список сохраненных объектов сообщений, хранящихся в хранилище данных. Я получаю эту ошибку:

Traceback (последний последний вызов):
Файл "C: \ Program Files" (X86) \ Google \ google_appengine \ Google \ AppEngine \ внутр \ webapp__init __. Ру», линия 515, вызов handler.get (* groups) Файл "C: \ Users \ Sergio \ Downloads \ python-test \ python-test \ gae_test \ handlers.py", строка 23, в get Файл messages = data.get_messages () "C: \ Users \ Серджио \ Загрузки \ питон-тест \ питон-тест \ gae_test \ data.py", строка 12, в get_messages dbMessage = db.GqlQuery ("ВЫБЕРИТЕ * ИЗ СООБЩЕНИЯ ПО ЗАКАЗУ АВТОРА DESC")
Файл "C: \ Program Files" (X86) \ Google \ google_appengine \ Google \ AppEngine \ вн \ db__init __. Ру», строка 2296, в init model_class = class_for_kind (self._proto_query._entity) Файл "C: \ Program Files" (X86) \ Google \ google_appengine \ Google \ AppEngine \ вн \ db__init __. Ру», строка 266, в class_for_kind поднять KindError ('Нет реализации для вида \'% s \ ''% kind) KindError: Нет реализация для вида 'Message'

Возможно, кто-то с опытом может объяснить, что именно означает это исключение.

Вот мой код:

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 }} &bull; {{ message.email }}</span>
  </li>
  {% endfor %}
</ul>

Что я делаю не так?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 17 января 2011

Это происходит потому, что класс модели - в данном случае, «Сообщение» - не был загружен при выполнении запроса. Я не вижу его нигде в вставленном вами фрагменте - убедитесь, что он включен и импортирован перед выполнением запроса.

2 голосов
/ 17 января 2011

Вероятно, вам не хватает импорта.

Для выполнения запроса gql необходимо импортировать фактические модели, на которые он ссылается.

1 голос
/ 17 января 2011

Я не вижу Класс сообщения, который представляет элементы сообщения.

вставьте его, и если он уже вставлен, пожалуйста, сообщите мне

<code>from google.appengine.ext import db</p>

<p>class Message(db.Model):
    author = db.StringProperty()
    body= db.StringProperty()
    phone= db.StringProperty()
    email = db.StringProperty()

и конечнов хранилище данных должны быть сообщения для извлечения

, поэтому вы должны вставить сообщения, используя метод put, например, в этом сценарии в методе post

<code>message = Message()
message.author = "the author"
message.body = "the body"
message.phone ="phone number"
message.email = "email"
message.put()
0 голосов
/ 09 декабря 2014

Похоже, ваш класс 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

И эквивалент "SELECT * FROM Person": https://github.com/rbanffy/appengine-fixture-loader/blob/master/tests/multi_level_tests.py#L56

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