web-dev-qa-db-ja.com

オブジェクトはアイテム割り当てエラーをサポートしていません

私のviews.pyフォームを保存する前に値を割り当てます。以前は次の方法でそれを行っていました。

projectForm.lat = session_results['lat']
projectForm.lng = session_results['lng']

ここで、変数のリストが少し長くなったので、session_results次のループ(Adam here で説明):

for k,v in session_results.iteritems():
    projectForm[k] = v

しかし、エラー'Project' object does not support item assignmentループソリューション。理由を理解するのに苦労しています。 Projectは、ModelFormに使用するモデルクラスです。

ご協力ありがとうございました!

44
neurix

エラーは明らかなようです。モデルオブジェクトはアイテムの割り当てをサポートしていません。 MyModel.objects.latest('id')['foo'] = 'bar'はこの同じエラーをスローします。

モデルインスタンスがprojectForm...と呼ばれるのは少し混乱します.

ループ内でコードの最初のブロックを再現するには、setattrを使用する必要があります

for k,v in session_results.iteritems():
    setattr(projectForm, k, v)
63

別の方法は、__ getitem ____ setitem __関数を追加することです

def __getitem__(self, key):
    return getattr(self, key)

今すぐself [key]を使用してアクセスできます。

19
Ivan Wang