gpt4 book ai didi

python - KindError : No model class found for kind. ndb.Model._kind_map 实际更新时间是什么时候?

转载 作者:行者123 更新时间:2023-11-28 17:41:14 25 4
gpt4 key购买 nike

我正在重构我们的模型模块,将它从一个大文件拆分成多个文件。试图绕过由单个文件引入的不可避免的依赖循环是很困难的,但我们做到了。

现在,令我们惊讶的是,在测试实例上测试新代码时,我们得到 KindError: No model class found for kind 'Foo'。您是否忘记导入它? 错误。

由于我们的单元测试都是绿色的,我们认为这一定是由于现有条目存储了对模型类的“旧”引用。

花了一些时间将问题缩小到 _kind_map ndb.Model 的属性。我对这张 map 在内部更新的确切时间感到困惑? AppEngine 何时/如何决定向该 map 添加模型类?

我们正在通过调用 _fix_up_properties() 来尝试解决方法为临时处理程序中的每个模型显式方法,但我不确定这是否可取,以及是否没有任何意外的副作用。

编辑:

我尝试在 2 个不同版本的应用程序上打印出 _kind_map.keys()。一个是旧的、未重构的版本,另一个是重构的版本。

在旧版本中,所有模型都列为键(39 个模型)。在重构版本中,它只列出了 5 个模型。这 5 个模型是唯一在用于打印 key 的处理程序上导入的模型。所以我想每次导入模型时 map 都会更新?但是为什么非重构版本打印出来的是39呢?打印的处理程序也只在那里导入 5 个模型。

最佳答案

Guido van Rossum posted 2012 年

Most likely the module containing the class definition for Account is not imported (directly or indirectly) by the code that executes the get() request. Adding the import should make the issue go away. (This is because the kind map is updated when the model class definition is read. Given only the kind name, e.g. 'Account', NDB doesn''t know which module to import to find the model class.

如果您从另一个模块(例如 models.MyKind)导入模型,则 NDB 不会将“MyKind”识别为仅“models.MyKind”的种类。

以下生成一个 KindError,

import models
import ndb
key = ndb.Key(urlsafe=encoded_key)
entity = key.get() #KindError

将最后两行移动到 models.py,例如 @staticmethod 并且它有效。可能有更好的解决方案。

关于python - KindError : No model class found for kind. ndb.Model._kind_map 实际更新时间是什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com