2012-01-21 7 views
2

Djangoオブジェクトはuser.nameの場合は定義できません。つまり、user['name']で定義することはできません。Djangoオブジェクトは "subscriptableではありません"と書いて冗長コードを書くようになります

info = {'first_name': 'Artur', 'last_name': 'Sapek'} 

me = User() 
for i in info: 
    me[i] = info[i] 

TypeError: 'User' object is not subscriptableをもたらし、私は自分自身がより多くの情報があり、それは常に完全ではないので(それは、if文なども必要と

info = {'first_name': 'Artur', 'last_name': 'Sapek'} 

if 'first_name' in info: me.first_name = info['first_name'] 
if 'last_name' in info: me.first_name = info['last_name'] 
so on... 

のようなコードを書く見つける - これが私の実際ではありませんコード)

Djangoオブジェクトでこれを行うより良い方法はありますか?リスト、辞書、文字列のようにブラケット表記を使用する柔軟性はありませんか?

答えて

11

setattrはあなたが探しているものです。あなたのケースでは

あなたはこのような何かを行うことができます:

for attr, value in info.items(): 
    setattr(me, attr, value) 
+0

私は良い方法がなければならないことを知っていました。ありがとう! –

+0

お手伝いします!あなたの質問に答えられた場合、戻って「受け入れる」ボタンを押すことを忘れないでください:) – grncdr

8

がなぜ次の操作を行いません。もちろん

info = {'first_name': 'Artur', 'last_name': 'Sapek'} 
user = User(**info) 

をあなたはcontrib.authのあなたがする必要がありますUserモデルを使用している場合、必要なフィールドを入力します。

関連する問題