Есть ли в моделях Django данные, содержащие все текущие значения? - PullRequest
1 голос
/ 15 октября 2010

Что-то вроде

my_model.data_dict['my_field']

Что даст вам текущее значение для этого поля?Нужно что-то подобное для взаимодействия с другим моим кодом.

Ответы [ 3 ]

3 голосов
/ 08 февраля 2012

Вы также можете взглянуть на метод значений в наборе запросов.Он возвратит словари для любого запроса вместо обычных экземпляров модели.

https://docs.djangoproject.com/en/1.3/ref/models/querysets/#values

(из документов)

>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
1 голос
/ 08 февраля 2012

У них есть свойство __dict__ (стандартное свойство): my_model.__dict__['my_field']

Тем не менее, стандартный способ сделать такой доступ - getattr: getattr(my_model, 'my_field').

См .: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes. Также посмотрите __slots__, чтобы понять, какие классы не имеют этого свойства.

Как отмечает Джереми выше, любой, кто ищет это с помощью django, может также подумать об использовании queryset.values() (https://docs.djangoproject.com/en/dev/ref/models/querysets/#values).

1 голос
/ 15 октября 2010

Это немного сложно, но вы можете сделать это так:

def model2dict(obj):
   return dict([(field, getattr(obj, field)) for field in obj._meta.get_all_field_names()])

Таким образом, вы можете получить доступ к значениям:

model2dict(my_model)['my_field']
...