Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据存储。虽然数据存储中存在对象属性,但未找到该属性_Python_Google App Engine_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Python 数据存储。虽然数据存储中存在对象属性,但未找到该属性

Python 数据存储。虽然数据存储中存在对象属性,但未找到该属性,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,当代码检查用户是否可以执行操作时,找不到ndb.BooleanProperty(default=False)属性 我尝试过使用ndb.StringProperty而不是Boolean属性,但没有什么区别。物业内的其他属性已识别。 最有趣的是,如果我在HTML的jinja2中放置{{user.org_setup_done}}标记,它将正确返回属性值,即False 换句话说,我知道该属性已正确创建并存储在用户实体中,因为我可以在数据存储中看到它,并在HTML中使用jinja2标记调用它。但是,当我对

当代码检查用户是否可以执行操作时,找不到ndb.BooleanProperty(default=False)属性

我尝试过使用ndb.StringProperty而不是Boolean属性,但没有什么区别。物业内的其他属性已识别。 最有趣的是,如果我在HTML的jinja2中放置{{user.org_setup_done}}标记,它将正确返回属性值,即False

换句话说,我知道该属性已正确创建并存储在用户实体中,因为我可以在数据存储中看到它,并在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\u setup\u 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'
有人知道这件事吗?我真的被这个弄糊涂了

user = self.user_obj()  # get the user object from session, returns None if no session exists
我认为您的
User
模型与
webapp2

您可以配置webapp2以使用
用户
模型

webapp_app = webapp2.WSGIApplication(
config={
    ...
    'webapp2_extras.auth': {'user_model': 'path.to.my.user_model_file.User'},
})
但是
webapp2
的会话代码可能对
User
对象具有哪些字段/函数有一些假设,因此您需要在
User
中实现这些字段/函数。 您还可以让您的用户模型继承webapp2模型

from webapp2_extras.appengine.auth.models import User as _webapp2_User

class User(_webapp2_User):
    ...

根据@Alex的说法,webapp2的内置用户模型和我创建的用户模型之间似乎存在冲突

虽然我也不确定问题是否在webapp2的会话代码和我以管理员身份登录时创建的会话代码之间


i、 e.由于该网站尚未上线,因此它在app.yaml文件中以管理员身份登录谷歌。一旦我登录到dev服务器,webapp2就会创建一个会话cookie。然后,当我为站点创建一个新用户时,会创建另一个会话cookie,这次是通过dispatch中的BaseHandler创建的。我对代码的了解不足以知道冲突是否确实存在于这两个会话cookie中,但可能是这样。

在添加
org\u setup\u done
属性或将其默认值添加到模型中之前,您是否创建了任何用户对象?@DanCornilescu谢谢。我已经删除了以前创建的用户,并刷新了memchache以确保这不是问题所在。我将属性的名称更改为完全任意的名称,将其改为字符串而不是布尔值,并删除了默认值,改为硬编码“False”。我仍然有相同的错误消息。找到其他属性,即电子邮件,如果呈现org-create.html模板,则{{user.email}}正确返回值,而{{user.arbital value}未找到。我已经看了将近2天了,不知道如何解决这个问题!谢谢,虽然我不确定。我在以前的一个简单项目中使用了一个名为User的模型,没有类似的问题。我将尝试更改模型名称(尽管会导致实时版本出现问题),看看它是否有效。干杯。发生了冲突,我将用户模型名称更改为Users,它按预期工作。