_obj.field
_以外の方法でオブジェクトフィールドの値を取得できますか? obj.get('field')
のようなものは存在しますか?フィールドの値を設定する場合も同じです。
フィールドの値を取得するには:
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 のドキュメントを読むことができます。これは本当に便利です。
なぜこれが欲しいのですか?
あなたが使うことができます
obj.__dict__['field']
私は推測します...それはメソッド呼び出しではありませんが
changed=[field for (field,value) in newObj.__dict__ if oldObj.__dict__[field] != value]
変更されたすべてのフィールドのリストが表示されます。
(100%確信はありませんが)
誰かがこの小さな質問に出くわした場合、答えはここにあります: イントロスペクトする方法Djangoモデルフィールド?
関連フィールドを取得するには:
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("__"))
ダンノ、おそらくそれを行うためのより良い方法がありますが、それは私にとってはうまくいきました。