объект django получить / установить поле - PullRequest
28 голосов
/ 18 апреля 2009

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

Ответы [ 4 ]

69 голосов
/ 20 июня 2009

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

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

6 голосов
/ 18 апреля 2009

зачем тебе это?

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

obj.__dict__['field']

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

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

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

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

3 голосов
/ 08 ноября 2010

Если кто-то наткнется на этот маленький вопрос, ответ прямо здесь: Как исследовать поля модели Django?

2 голосов
/ 18 июня 2011

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

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

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

...