gpt4 book ai didi

python - GAE Expando 动态设置属性类型

转载 作者:行者123 更新时间:2023-11-28 22:58:59 24 4
gpt4 key购买 nike

我正在使用 NDB 和一个名为 MBObject 的 Expando 模型,因为我是在没有固定方案的情况下动态创建对象。我从字典创建对象:

dic = {"groupName" : "my group",
"members" : [{"memberId" : "1"}, {"memberId" : "2"}]}

所以我想做的是创建一个组对象,它有一个名为 members 的属性,其中 members 是 MBObjects 的 LocalStructuredProperty。 (所有对象都是 MBObject 的,ndb.Expando 的子类)

但是,似乎没有办法动态指定第二部分,而且我遇到了错误:

def config_obj_from_dic(dictionary):
object = MBObject()
for key, value in dictionary.iteritems():
if isinstance(value, list):
objects = list()
for dic in value:
objects.append(config_obj_from_dic(dic))
value = objects
setattr(object, key, value)
return object

所以基本上我最终得到一个成员列表,并尝试将其设置为对象的属性,并希望它自动意识到我想要一个重复的 LocalStructuredProperty。所以很明显我看到了问题出在哪里,它不够聪明,无法自行处理。问题是,我将如何处理它?<​​/p>

如果它不能与 LocalStructuredProperty 一起使用,那么我也可以使用 ndb.JsonProperty,但它仍然是同样的问题:我如何动态地告诉它我希望它成为一个属性某种类型?

tl;dr:如果我有一个 Expando 模型,并且执行 setattr(object, key, a_list),我将属性设置为列表,如何我能否让它知道我想要一个 LocalStructuredProperty 或一个 JsonProperty,因为现在它不知道如何处理该列表。

最佳答案

NDB expando 模型使用 GenericProperty设置数据,只支持以下类型:int, long, float, bool, str, unicode, datetime, Key, BlobKey, GeoPt, User, None。

要解决这个问题:如果您知道成员的所有属性和名称,那么您可以使用具有预定义属性(在文档中描述)的 expando 模型作为 LocalStructuredProperty。但是,如果您不知道这一点(这很有意义,因为您使用的是 expando),那么最好的选择可能是手动将这些成员序列化为 JSON 并将它们作为字符串保存在 expando 属性中。

关于python - GAE Expando 动态设置属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370964/

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