web-dev-qa-db-ja.com

djangoオブジェクトの取得/設定フィールド

_obj.field_以外の方法でオブジェクトフィールドの値を取得できますか? obj.get('field')のようなものは存在しますか?フィールドの値を設定する場合も同じです。

28
dandu

フィールドの値を取得するには:

getattr(obj, 'field_name')

フィールドの値を設定するには:

setattr(obj, 'field_name', 'field value')

Djangoオブジェクトのすべてのフィールドと値を取得するには:

[(field.name, getattr(obj,field.name)) for field in obj._meta.fields]

Model _meta API のドキュメントを読むことができます。これは本当に便利です。

69
João Marcus

なぜこれが欲しいのですか?

あなたが使うことができます

obj.__dict__['field']

私は推測します...それはメソッド呼び出しではありませんが

changed=[field for (field,value) in newObj.__dict__ if oldObj.__dict__[field] != value]

変更されたすべてのフィールドのリストが表示されます。

(100%確信はありませんが)

6
elzapp

誰かがこの小さな質問に出くわした場合、答えはここにあります: イントロスペクトする方法Djangoモデルフィールド?

3
StefanNch

関連フィールドを取得するには:

def getattr_related(obj, fields):
    a = getattr(obj, fields.pop(0))
    if not len(fields): return a
    else:               return getattr_related(a, fields)

例えば。、

getattr_related(a, "some__field".split("__"))

ダンノ、おそらくそれを行うためのより良い方法がありますが、それは私にとってはうまくいきました。

2
g33kz0r