2011-01-04 3 views
1

私はajaxを使ってデータをdjangoビューに送り、request.POST経由でデータを受け取ります。モデルの値だけでなく更新する必要があるモデルフィールドを転記しています。私はちょうど私がモデルのフィールドを設定できるように、私はrequest.POST ['field_name']から抽出するフィールド名変数を使用する方法を知る必要があります。ここに私のコードです。django request.POSTフィールド名の置換

field_name = request.POST["field_name"] 
field_value = request.POST["field_value"] 

member_id = get_member_session(request).id 
try: 
    member = Members.objects.get(id=member_id) 
except: 
    status="ERROR-USER-DOES-NOT-EXIST" 
    return json_status(status) 

try: 
    member.field_name=field_value 
    member.save() 
    return json_status('OK') 
except: 
    status = "USER_SAVE_ERROR" 
    return json_status(status) 

member.field_nameは明らかに正しくありません。 eval(field_name)などを使用する必要がありますか?可能であれば私は好きではありません。

感謝

リッチ

答えて

5

あなたがオブジェクトに変数属性を設定することができます使用setattr、:

try: 
    member._meta.get_field(field_name) 
except member.FieldDoesNotExist: 
    # return something to indicate the field doesn't exist 
    return json_status('USER_FIELD_ERROR') 

setattr(member, field_name, field_value) 
member.save() 
return json_status('OK') 

編集:私はそれがより良いアプローチだとして、model._meta.get_fieldを使用するように更新。に記載されているthis answer for another question.

+0

ワウ素晴らしい、感謝アレックス! – Rich

+0

緑色のチックを引っ込めて申し訳ありませんが、コードを入れて、次のエラーが表示されます: 'member'の 'field_nameがメンバーの場合は' 'メンバー'は '' iterable ''型の引数がありません。私はそれが何かを見ることができません。私は 'if'ステートメントを削除しましたが、それは素晴らしいですが、私が答えを知るまで完全に正しいとは言えません。もう一度ありがとうAlex – Rich

+0

もう一度アレックスに感謝します! – Rich

関連する問題