Можно ли получить значение поля объекта другим способом, чем "obj.field". Существует ли что-то вроде "obj.get(" field ")? То же самое для установки значения поля.
Поле get/set объекта django
Ответ 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%)
Ответ 3
Если кто-то споткнется на этот маленький вопрос, ответ здесь: Как наследовать поля модели django?
Ответ 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("__"))
Не знаю, может быть, есть лучший способ сделать это, но это сработало для меня.