2013-10-06 22 views
0

試圖改變這裏的例子:https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingdatastore更新到數據存儲未保存或從錯誤的ansestor讀取?

但不是一個問候項目,我想保存一個學生項目。在與/app交互的靜態目錄中使用AngularJS來獲取數據。我只有一個POST和一個GET,POST將保存一個條目,GET將顯示前10個條目。

當我發佈JSON似乎被保存,反應:

{"name": "name", "age": 22, "creator": "[email protected]"} 

當我這樣做的GET請求來獲取列表但不返回任何,我得到:[]

看着我的代碼和示例代碼,並來回我無法找到差異。示例代碼工作並保存了Greetings,因此我的代碼必須出錯。

import logging 
import cgi 
import urllib 
import json 
from google.appengine.api import users 
from google.appengine.ext import ndb 
import webapp2 

DEFAULT_DS_NAME = 'default_ds' 

def student_key(ds_name=DEFAULT_DS_NAME): 
    return ndb.Key('Student', ds_name) 

class StudentModel(ndb.Model): 
    creator = ndb.UserProperty() 
    name = ndb.StringProperty(indexed=False) 
    age = ndb.IntegerProperty() 

class Student(webapp2.RequestHandler): 

    def post(self): 
     st = json.loads(self.request.body) 
     student = StudentModel(parent=student_key()) 
     if users.get_current_user(): 
      student.creator = users.get_current_user() 
     student.name = st['name'] 
     student.age = st['age'] 
     key = student.put() 
     logging.info(key.id())#logs a number 
     st['creator']=student.creator.email() 
     self.response.write(json.dumps(st)); 

    def get(self): 
     student_query = StudentModel.query(
      ancestor=student_key()).order(-StudentModel.name) 
     students = student_query.fetch(10) 
     ret=[] 
     for student in students: 
      s={'name':'','age':0,'creator':''}; 
      if student.creator: 
       s["creator"]=student.creator.email() 
      s["name"]=student.name 
      s["age"]=student.age 
      logging.info("Pushing s");#never logs anything 
      ret.push(s) 
     self.response.write(json.dumps(ret))#returns [] 

application = webapp2.WSGIApplication([ 
    ('/app/student', Student) 
], debug=True) 

回答

1

你試圖通過沒有索引的字段排序查詢,所以你需要設置索引= True以學生模型:

name = ndb.StringProperty(indexed=True)