【发布时间】:2023-03-12 23:50:01
【问题描述】:
在我基于 GAE 的网络应用程序中,我加载了一个 NDB 实体并尝试对其进行编辑。但问题是我要编辑的字段是由字符串动态决定的,所以我无法对其进行硬编码。
我尝试了这些方法,但都没有成功
obj[fieldName] = newValue
obj.populate(fieldName,newValue)
obj.populate(Modlue._properties[fieldName] = newValue) #keyword can't be an expression
setattr(obj, fieldName,newValue) #value not being set
必须有一些正确的语法才能做到这一点。有人可以帮我解决这个问题吗
【问题讨论】:
-
最后一个是正确的。您如何验证该值没有被设置?
-
您也可以使用 populate 但传递字典。
obj.populate(**{fieldname:newValue})as populate 采用一组与属性相对应的命名参数。 -
@DanielRoseman 感谢您的帮助。最后一个确实有效
-
不同之处在于如果 fieldName 不是模型的定义属性, setattr(...) 只是设置一个本地(非持久)属性,而 populate(**...) 给出你是一个有用的错误。
-
**setattr 函数在实体中静态分配属性。但是您正在使用设置动态属性转到link
标签: python google-app-engine app-engine-ndb