是否可以在App Engine模型中动态命名属性?

Mat*_*ris 1 google-app-engine dynamic setattribute setattr listproperty

setattr允许您在Py​​thon类中动态命名属性.我正在尝试使用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())
Run Code Online (Sandbox Code Playgroud)

这段代码编译,但是当我model.prop1.append(key)稍后调用时,我收到此错误:

AttributeError: 'ListProperty' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

我怀疑这是因为prop1在模型中声明而不是self.prop1,但我不完全理解语法的意义.

有没有人完成这个,或者有没有人对语法差异有任何见解?

Dav*_*ill 5

我想你正在寻找db.Expando班级(而不是db.Model).