python 类方法 get_by_user returns None
python classmethod get_by_user returns None
我在使用 class 方法示例方面需要帮助 get_by_user 接下来是我对 class 方法的改编。
class Pages(ndb.Model):
user_id = ndb.StringProperty()
name = ndb.StringProperty()
@classmethod
def get_by_user(cls, user):
return cls.query().filter(cls.user_id == user.user_id()).get()
view.py 代码是下一个。
class MainPage(BaseHandler):
def get(self):
user = users.get_current_user()
logging.info("MainPageGet: %s " % user)
if user: #offer user options
isUser = True
user_ID = user
for p in Pages.query():
logging.info("MainPageGet p: %s " % p.user_id)
logging.info("MainPageGet user_ID: %s " % user_ID)
page = Pages.get_by_user( user_ID)
logging.info("MainPageGet page: %s " % page )
我的日志结果如下。
<pre>
INFO 2018-02-10 04:28:21,509 views.py:192] MainPageGet: test@example.com
INFO 2018-02-10 04:28:21,518 views.py:198] MainPageGet p: test@example.com
INFO 2018-02-10 04:28:21,519 views.py:198] MainPageGet p: joan@hotmail.com
INFO 2018-02-10 04:28:21,519 views.py:200] MainPageGet user_ID: test@example.com
INFO 2018-02-10 04:28:21,524 views.py:204] MainPageGet page: None
INFO 2018-02-10 04:28:21,535 module.py:812] default: "GET / HTTP/1.1" 200 2284
</pre>
我的示例ndb数据生成如下。
page1 = Pages(id='BS',user_id='test@example.com',name='Brian')
page2 = Pages(id='JS',user_id='joan@hotmail.com',name='Joan')
page1.put()
page2.put()
所以,我的问题是,我做错了什么是在最终记录结果中生成 None 结果,而不是为 id='BS'
定位 test.example.com
结果?
user.user_id()
return是一个ID,至少在开发服务器上是一个数值,比如这个:185804764220139124118
.
但是当您创建 Pages
实体时,您将其 user_id
属性 的值设置为包含电子邮件地址的字符串:user_id='test@example.com'
.
因此 get_by_user()
中的查询不会 return 任何实体,因为 none 匹配过滤器。
您可以将 get_by_user()
修改为这样的内容(在这种情况下您可能需要调整实际的 属性 名称,以避免混淆):
@classmethod
def get_by_user(cls, user):
return cls.query().filter(cls.user_id == user.email()).get()
我在使用 class 方法示例方面需要帮助 get_by_user 接下来是我对 class 方法的改编。
class Pages(ndb.Model):
user_id = ndb.StringProperty()
name = ndb.StringProperty()
@classmethod
def get_by_user(cls, user):
return cls.query().filter(cls.user_id == user.user_id()).get()
view.py 代码是下一个。
class MainPage(BaseHandler):
def get(self):
user = users.get_current_user()
logging.info("MainPageGet: %s " % user)
if user: #offer user options
isUser = True
user_ID = user
for p in Pages.query():
logging.info("MainPageGet p: %s " % p.user_id)
logging.info("MainPageGet user_ID: %s " % user_ID)
page = Pages.get_by_user( user_ID)
logging.info("MainPageGet page: %s " % page )
我的日志结果如下。
<pre>
INFO 2018-02-10 04:28:21,509 views.py:192] MainPageGet: test@example.com
INFO 2018-02-10 04:28:21,518 views.py:198] MainPageGet p: test@example.com
INFO 2018-02-10 04:28:21,519 views.py:198] MainPageGet p: joan@hotmail.com
INFO 2018-02-10 04:28:21,519 views.py:200] MainPageGet user_ID: test@example.com
INFO 2018-02-10 04:28:21,524 views.py:204] MainPageGet page: None
INFO 2018-02-10 04:28:21,535 module.py:812] default: "GET / HTTP/1.1" 200 2284
</pre>
我的示例ndb数据生成如下。
page1 = Pages(id='BS',user_id='test@example.com',name='Brian')
page2 = Pages(id='JS',user_id='joan@hotmail.com',name='Joan')
page1.put()
page2.put()
所以,我的问题是,我做错了什么是在最终记录结果中生成 None 结果,而不是为 id='BS'
定位 test.example.com
结果?
user.user_id()
return是一个ID,至少在开发服务器上是一个数值,比如这个:185804764220139124118
.
但是当您创建 Pages
实体时,您将其 user_id
属性 的值设置为包含电子邮件地址的字符串:user_id='test@example.com'
.
因此 get_by_user()
中的查询不会 return 任何实体,因为 none 匹配过滤器。
您可以将 get_by_user()
修改为这样的内容(在这种情况下您可能需要调整实际的 属性 名称,以避免混淆):
@classmethod
def get_by_user(cls, user):
return cls.query().filter(cls.user_id == user.email()).get()