【发布时间】:2019-12-30 15:51:51
【问题描述】:
当代码检查用户是否可以执行某项操作时,找不到 ndb.BooleanProperty(default=False) 属性。
我尝试使用 ndb.StringProperty 而不是 Boolean 属性,但没有区别。财产中的其他属性得到认可。 最有趣的是,如果我在 HTML 中的 jinja2 中放置一个 {{user.org_setup_done}} 标记,它会正确返回属性的值,即 False。
换句话说,我知道该属性已正确创建并存储在 User 实体中,因为我可以在数据存储中看到它并在 HTML 中使用 jinja2 标记调用它。但是,当我对其进行检查时,却找不到。
class User(ndb.Model):
"""
model for storing user information
"""
email = ndb.StringProperty(required=True) # the users email, as username
pass_hash = ndb.StringProperty(required=True) # the users hashed password
org_setup_done = ndb.BooleanProperty(default=False) # if the user has completed the org profile for creating events
class OrgCreateCompStartHandler(BaseHandler):
"""handler that lets you start creating an event by choosing series, date, name, start time and venue"""
def get(self):
try:
user = self.user_obj() # get the user object from session, returns None if no session exists
if user.org_setup_done: # check to see if the user is org_ready. If yes, continue with the event creation,
# if no then redirect to the profile page for event organisers.
# : TEMPLATE VALUES
template_values = {
'user': user,
}
# : RENDER TEMPLATE
self.render_template(ROUTE, 'org-create.html', template_values)
else:
self.redirect("/")
except Exception, e:
logging.error("ERROR is %s" % e)
logging.exception("EXC is %s" % e)
self.redirect("/oops") # unexpected error
预期结果应该是在代码检查 org_setup_done 属性为 True 后呈现 org-create.html 页面。
实际结果如下错误:
Traceback (most recent call last):
File "C:\Users\events.py", line 2433, in get
if user.org_setup_done:
AttributeError: 'User' object has no attribute 'org_setup_done'
有人对此有任何想法吗?我真的被这个弄糊涂了。
【问题讨论】:
-
在添加
org_setup_done属性或将其默认值添加到模型中之前,您是否有创建了任何用户对象? -
@DanCornilescu 谢谢。我已经删除了之前创建的用户并刷新了 memchache 以确保这不是问题。我将属性的名称更改为完全任意的名称,并将其设为字符串而不是布尔值,并删除了默认值,改为硬编码“False”。我仍然有同样的错误信息。找到其他属性,即电子邮件,如果呈现 org-create.html 模板,则 {{ user.email }} 正确返回值,而 {{ user.arbitrary value }} 未找到。我已经看了将近 2 天了,不知道如何解决这个问题!
标签: python google-app-engine google-cloud-datastore app-engine-ndb