我能否以obj.field
以外的其他方式获取对象字段的值?是否存在类似obj.get('field')
的内容?设置字段值也是一样。
答案 0 :(得分:69)
获取字段的值:
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文档。
答案 1 :(得分:6)
你为什么要这个?
您可以使用
obj.__dict__['field']
我猜...虽然这不是方法调用
changed=[field for (field,value) in newObj.__dict__ if oldObj.__dict__[field] != value]
将为您提供所有已更改字段的列表。
(虽然我不是100%肯定)
答案 2 :(得分:3)
如果有人偶然发现这个小问题,答案就在这里: How to introspect django model fields?
答案 3 :(得分:2)
获取相关字段:
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("__"))
Dunno,也许有更好的方法可以做到,但这对我有用。