使用这样的数据模型class M(ndb.Model): p1 = ndb.StringProperty() p2 = ndb.StringProperty() p3 = ndb.StringProperty()我正在尝试使用类似这样的循环来设置属性值list = ["a","b","c", "d"]newM = M( id = "1234" )for p in ['p1','p2','p3']: newM[p] = choice(list)newM.put()但我得到一个错误错误'M'对象不支持项目分配没有显式定义每个属性,有没有办法做到这一点?
2 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
p1,p2,p3被定义为模型的属性,并且模型不支持setitem或getitem访问(即,模型的行为不像字典)。另一个答案建议使用setattr,它将起作用。但是,只是偶尔可能会导致问题,具体取决于您尝试使用setattr的类型。另一种选择是使用_set_value看起来像
for prop in M._properties.values():
prop._set_value(newM,choice(list)
或者如果您只想要特定的属性而不是全部。
clist= ["a","b","c", "d"]
newM = M( id = "1234" )
for p in ['p1','p2','p3']:
M._properties[p]._set_value(newM,choice(clist))
newM.put()
其他需要考虑的 list是内置类型,您不应为其分配值。
添加回答
举报
0/150
提交
取消