【发布时间】:2010-10-20 07:09:14
【问题描述】:
我可以通过obj.field以外的其他方式获取对象字段的值吗?像obj.get('field') 这样的东西存在吗?设置字段的值也是如此。
【问题讨论】:
标签: django-models
我可以通过obj.field以外的其他方式获取对象字段的值吗?像obj.get('field') 这样的东西存在吗?设置字段的值也是如此。
【问题讨论】:
标签: django-models
获取字段的值:
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的文档,非常有用。
【讨论】:
获取相关字段:
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("__"))
不知道,也许有更好的方法,但对我有用。
【讨论】:
如果有人偶然发现这个小问题,答案就在这里: How to introspect django model fields?
【讨论】:
你为什么要这个?
你可以使用
obj.__dict__['field']
我猜……虽然它不是方法调用
changed=[field for (field,value) in newObj.__dict__ if oldObj.__dict__[field] != value]
将为您提供所有已更改字段的列表。
(虽然我不是 100% 确定)
【讨论】: