Это показалось довольно интересным, поэтому я просмотрел исходный код django.forms и специально искал реализацию ModelForm.Я подумал, что ModelForm будет достаточно хорош для самоанализа данного экземпляра, и так уж получилось, что есть удобная функция, которая может помочь вам на вашем пути.
>>> from django.forms.models import model_to_dict
>>> from django.contrib.auth.models import Group
>>> g = Group.objects.filter()[0]
>>> d = model_to_dict(g)
>>> d
{'permissions': [40, 41, 42, 46, 47, 48, 50, 43, 44, 45, 31, 32, 33, 34, 35, 36, 37, 38, 39], 'id': 1, 'name': u'Managers'}
>>>
Понятно, атрибут _meta
недокументировано, потому что является внутренней деталью реализации.Я не вижу, чтобы это изменилось в ближайшее время, поэтому, вероятно, это относительно безопасно для использования.Вы, вероятно, можете использовать функцию model_to_dict
, описанную выше, для начала того, что вы хотите делать.Там не должно быть много изменений.Остерегайтесь обратных отношений, если вы планируете рекурсивное включение моделей.
Возможно, вы захотите исследовать и другой путь.django-piston
- это среда RESTful, которая объявляет несколько emitters
, которые могут быть вам полезны, в частности, метод BaseEmitter.construct()
.Вы должны быть в состоянии легко определить DictionaryEmitter
, который вы используете для целей, отличных от сериализации RESTful.