引发BadValueError(实体具有未初始化的属性:created_by)

时间:2018-10-15 17:21:04

标签: python-2.7 google-app-engine web-applications google-cloud-datastore webapp2

我遇到500错误。我检查了谷歌应用程序引擎上的日志。我发现这是由于提高BadValueError(实体具有未初始化的属性:created_by)

有日志的屏幕截图。请在下面进行检查。 enter image description here

我们用来创建数据存储区的模型是这个。

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仪表板上,我没有不同数据类型的两个相同属性,因此无法处理这种情况。需要高级开发人员的指导和帮助。

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您在本地环境中,建议您删除/刷新此模型的所有实体。

然后尝试使用classes以外的其他单词作为属性名称来重现它。

答案 1 :(得分:0)

认为我在GAE早期也看到了这个错误,当我一直在修改实体模型时,我现在不愿意这样做,因为我知道更改需要格外小心,而且几乎总是需要迁移策略。

在将required=True选项添加到模型的属性后,我得到了它。显然,如果您尝试put是没有设置该属性的实体,则该选项将导致错误。但是,当在模型中启用该选项之前,尝试在不设置属性的情况下尝试在数据存储中获取实体put时,也会导致错误。我怀疑这可能正在发生。请注意,此检查是ndb特有的,因此它将影响您的应用程序代码,但不会影响控制台查看器或使用其他客户端库的应用程序。

Entity menu中查看所有该类型的实体,检查没有设置属性的实体。

尝试为您的应用启用调试功能(通过在应用的debug=True调用中传递webapp2.WSGIApplication()),该操作应该显示附加到相应请求日志的回溯。弄清楚到底在哪里遇到错误会很有帮助。

您在“仪表盘”图像中突出显示的重复项可能是红色鲱鱼-我的应用程序中也看到了类似的内容,没有不良影响(或至少没有我注意到)。

我不确定其中某些不是我及时对实体模型所做的各种更改的副作用,尤其是翻转某些属性的indexed设置。

但是我几乎可以肯定,字符串/文本属性仅是由数据存储区Text string的属性引起的,仅当值的长度小于1500字节时(即{{1}中被视为不同的属性类型) }-ndbTextProperty)。

还请注意,对于未建立索引的属性,StringProperty索引是正常的,例如,请参见您的0B属性。