django对象获取/设置字段

时间:2009-04-18 14:55:54

标签: django-models

我能否以obj.field以外的其他方式获取对象字段的值?是否存在类似obj.get('field')的内容?设置字段值也是一样。

4 个答案:

答案 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,也许有更好的方法可以做到,但这对我有用。