Поле get/set объекта django

Можно ли получить значение поля объекта другим способом, чем "obj.field". Существует ли что-то вроде "obj.get(" field ")? То же самое для установки значения поля.

Ответ 1

Чтобы получить значение поля:

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, которая действительно полезна.

Ответ 2

зачем вам это нужно?

Вы можете использовать

obj.__dict__['field']

Я думаю... хотя это не вызов метода

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

предоставит вам список всех полей, в которых они были изменены.

(хотя я не уверен на 100%)

Ответ 4

Чтобы получить связанные поля:

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("__"))

Не знаю, может быть, есть лучший способ сделать это, но это сработало для меня.