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()setattr()関数を使用する必要があります。__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 に答える