0

我正在尝试遍历字典和实体。dict键与实体属性匹配的地方,我想将键的值分配为属性的值。

我的模型代码是:

class myModel(db.Model):
    Property1 = db.IntegerProperty()
    Property2 = db.StringProperty(required=True,choices=set(["this", "that", "other"]))
    Property3 = db.StringProperty()

我的字典是:

{u'Property1': u'1234', u'Property2': u'trouble', u'Property3': u'2321'}

我用来遍历这两个对象的代码有效,但是它跳过了模型中的验证。如果我明确分配myModel.Property2 = 'trouble',我会收到 BadValueError。但是,在下面的代码中我没有。

for le_attr, le_value in myModel.__dict__.iteritems():
    for key, value in Data[0].items():
        if ('_' + str(key)) == (str(le_attr)):
            myModel.__dict__[le_attr]= value

我的想法是,无论字典中有多少键,只会分配与属性匹配的键,而忽略所有其他键。使用上面的代码,这是可行的。

但是有没有办法做到这一点并且仍然进行验证?

4

1 回答 1

0

您需要使用dir()andsetattr()函数而不是深入__dict__结构:

for le_attr in dir(myModel)
    if le_attr in Data[0]:
        setattr(myModel, le_attr, Data[0][le_attr])
于 2013-02-23T18:39:50.060 回答