我遇到500错误。我检查了谷歌应用程序引擎上的日志。我发现这是由于提高BadValueError(实体具有未初始化的属性:created_by)
我们用来创建数据存储区的模型是这个。
class YoProject(BaseNDBExpando):
project_name = ndb.StringProperty(required=True)
***created_by = ndb.KeyProperty(required=True)***
created_by_name = ndb.StringProperty(required=True, indexed=False)
client_name = ndb.StringProperty(required=True)
client_spoc_name = ndb.StringProperty(required=True, indexed=False)
client_spoc_email = ndb.StringProperty(required=True)
type_ = ndb.StringProperty(required=True, choices=["tm", "pa"])
description = ndb.TextProperty(indexed=False)
hidden = ndb.BooleanProperty(required=True, default=False)
运行正常。但是,当我尝试在其中引入类属性时,我开始遇到此错误,并且在GAE Datastore仪表板上,我没有不同数据类型的两个相同属性,因此无法处理这种情况。需要高级开发人员的指导和帮助。
答案 0 :(得分:0)
如果您在本地环境中,建议您删除/刷新此模型的所有实体。
然后尝试使用classes
以外的其他单词作为属性名称来重现它。
答案 1 :(得分:0)
我认为我在GAE早期也看到了这个错误,当我一直在修改实体模型时,我现在不愿意这样做,因为我知道更改需要格外小心,而且几乎总是需要迁移策略。
在将required=True
选项添加到模型的属性后,我得到了它。显然,如果您尝试put
是没有设置该属性的实体,则该选项将导致错误。但是,当在模型中启用该选项之前,尝试在不设置属性的情况下尝试在数据存储中获取实体put
时,也会导致错误。我怀疑这可能正在发生。请注意,此检查是ndb
特有的,因此它将影响您的应用程序代码,但不会影响控制台查看器或使用其他客户端库的应用程序。
在Entity menu中查看所有该类型的实体,检查没有设置属性的实体。
尝试为您的应用启用调试功能(通过在应用的debug=True
调用中传递webapp2.WSGIApplication()
),该操作应该显示附加到相应请求日志的回溯。弄清楚到底在哪里遇到错误会很有帮助。
您在“仪表盘”图像中突出显示的重复项可能是红色鲱鱼-我的应用程序中也看到了类似的内容,没有不良影响(或至少没有我注意到)。
我不确定其中某些不是我及时对实体模型所做的各种更改的副作用,尤其是翻转某些属性的indexed
设置。
但是我几乎可以肯定,字符串/文本属性仅是由数据存储区Text string的属性引起的,仅当值的长度小于1500字节时(即{{1}中被视为不同的属性类型) }-ndb
和TextProperty
)。
还请注意,对于未建立索引的属性,StringProperty
索引是正常的,例如,请参见您的0B
属性。