我正在尝试列出在我的测试GAE应用中输入到我的数据存储区中的所有用户,并打印出每个用户的用户名。但是,当我运行下面的代码时,我得到一个错误说
self.query = User.all() AttributeError:类型对象'User'没有属性'all'
我认为self.query = User.all()
会返回我数据库中的所有用户吗?
我的代码如下。 提前谢谢!
PS。我知道我的用户搜索器表单是要求用户名而不对其执行任何操作,但过滤是一项以后的任务 - 我只是想确保我首先获得基本查询。
from google.appengine.ext import ndb
import webapp2
import uuid
class User(ndb.Model):
db_UID = ndb.StringProperty(indexed = True)
db_username = ndb.StringProperty(indexed = True)
db_password = ndb.StringProperty(indexed = True)
db_email = ndb.StringProperty(indexed = True)
db_resetID = ndb.StringProperty(indexed = True)
class UsersPage(webapp2.RequestHandler):
def get(self):
self.response.write('<html><body><h1>User Info Page</h1>')
self.response.write("""
<form method = "post">
Username: <input type = "textarea" name = "user_username"></input><br>
Password: <input type = "textarea" name = "user_password"></input><br>
Email address: <input type = "textarea" name = "user_email"></input><br>
<input type = "submit"></input>
</form>""")
self.response.write('</body></html>')
def post(self):
UNIQUE_ID_STRING = str(uuid.uuid1())
self.user = User(db_UID = UNIQUE_ID_STRING ,
db_username = self.request.get('user_username'),
db_password = self.request.get('user_password'),
db_email = self.request.get('user_email'))
self.user.put()
self.redirect('/user')
class UserFinder(webapp2.RequestHandler):
def get(self):
self.response.write('<html><body><h1>Search username</h1>')
self.response.write("""
<form method = "post">
Username: <input type = "textarea" name = "user_username"></input><br>
<input type = "submit"></input>
</form>""")
self.response.write('</body></html>')
def post(self):
self.query = User.all()
self.response.write('<html><body><h1>Search username</h1>')
for self.user in self.query:
self.response.write('<p>%s</p>' % self.User.db_username)
self.response.write('</body></html>')
application = webapp2.WSGIApplication([
('/user', UsersPage),
('/userfinder', UserFinder),
], debug = True)
答案 0 :(得分:4)
与基本的“db”版本不同,NDB模型不使用all()
进行查询,而是使用query()
,所以
self.query = User.query()
NDB docs on queries可能有用。
顺便说一句,尽可能多地使用self
有点不寻常;除了调用self.response.write
和self.redirect
之外,只使用局部变量会更加混乱(如果你必须发布更多问题,那就好了!),并且可以节省你的输入。
所以你的帖子方法将成为:
query = User.all()
self.response.write('<html><body><h1>Search username</h1>')
for user in query:
self.response.write('<p>%s</p>' % user.db_username)
self.response.write('</body></html>')