为了账号安全,请及时绑定邮箱和手机立即绑定

如何选择带字符串的ndb属性?

如何选择带字符串的ndb属性?

繁花如伊 2021-03-15 17:17:03
使用这样的数据模型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贡献1853条经验 获得超9个赞

python有setattr可以做你想要的。在循环内:

setattr(newM, p, choice(list)


查看完整回答
反对 回复 2021-03-23
?
蝴蝶刀刀

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是内置类型,您不应为其分配值。


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信