我正在尝试迭代字典和实体。如果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
我的想法是,无论字典中有多少个键,只会分配与属性匹配的键,而忽略所有其他键。使用上面的代码,这是有效的。
但是有没有办法做到这一点并且还在进行验证?
答案 0 :(得分:0)
您需要使用dir()
和setattr()
functions而不是戳入__dict__
结构:
for le_attr in dir(myModel)
if le_attr in Data[0]:
setattr(myModel, le_attr, Data[0][le_attr])