是否可以在 App Engine 模型中动态命名属性?
-
27-09-2019 - |
题
setattr
允许您动态命名 Python 类中的属性。我正在尝试使用 App Engine 模型做类似的事情:
class MyModel(db.Model):
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
# Doesn't fully work
setatr(self, 'prop1', db.ListProperty(db.Key))
setatr(self, 'prop2', db.StringListProperty())
# Works fully
# prop1 = db.ListProperty(db.Key))
# prop2 = db.StringListProperty())
这段代码可以编译,但是当我调用时 model.prop1.append(key)
后来,我收到这个错误:
AttributeError: 'ListProperty' object has no attribute 'append'
我怀疑这是因为 prop1
在模型中声明而不是 self.prop1
, ,但我不完全理解语法的意义。
有谁做到了这一点,或者有人对语法差异有任何见解吗?
解决方案
其他提示
我认为你正在寻找的 db.Expando
类(代替db.Model
)。
不知道,但将这项工作也许:
class MyModel(db.Model):
@classmethod
def new(cls, *args, **kwargs):
setattr(cls, 'props1', db.ListProperty(db.Key))
setattr(cls, 'props2', db.StringListProperty())
mymodel = cls(*args, **kwargs)
delattr(cls, 'props1')
delattr(cls, 'props2')
return mymodel
不隶属于 StackOverflow