通过getattr获取一个数据存储对象,而不知道它的类

2024-10-01 11:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过引用属性以这种方式获取实体。在

getattr(model, refrence)

其中model是db.Model,引用是db.ReferenceProperty。但我得到了一个更友好的错误,我可以通过添加以下类型的导入来避免这个错误。在

^{pr2}$

其中ReferedKind是我想在上面得到的实体的类getattr。在

但我的问题是,由于我想调用它的函数的性质,model可以属于我的任何模型类。所以我不知道ReferedKind是什么。在

如何在不导入每个可能的模型类的情况下调用getattr并获取引用的实体?在

有没有办法可以预先知道ReferanceProperty引用的实体的类,以便动态导入它?在

其他信息

我正在编写一个函数,它将返回一个json可序列化的python dict数据库()不可json序列化。所以这个函数不知道它需要把什么样的模型放入dict中


Tags: 函数模型实体jsondbmodel属性序列化
1条回答
网友
1楼 · 发布于 2024-10-01 11:38:18

通常,在执行任何操作之前,您需要导入所有可以检索的潜在模型。在

你把事情搞砸了。在

你唯一能做的就是在一个比数据库模型或者ndb.型号若要获取原始数据并检查它,则仍需要在取消引用referenceproperty或获取键之前导入模型。在

如果您决定这样做的话,ndm会更容易,因为它没有reference属性,而是KeyProperty,您可以使用getattr,检查是否有一个key,然后获取引用为key的对象。在

如果你想和db在一起。因为您需要使用get_value_for_datastore,所以会很混乱

这会涉及到

获取实体的类,获取类的属性,然后为传入实例的数据存储调用get_value_,然后假设您已导入,则可以获取密钥。在

因此,如果您有一个名为foo的数据存储实例

prop = getattr(foo.__class__,"the_property_name")
obj_key = prop.get_value_for_datastore(foo)

然后,您需要从键中获取类型,然后计算出如何导入该类型的模型,在get()键之前,您仍将得到KindError

我不确定所有的努力是值得的,你会发现它更容易导入模型。您最终需要在使用任何模型之前导入它。您可能获得的唯一好处是延迟导入,这可能会节省一些启动时间。在

相关问题 更多 >