这似乎相当有趣,所以我查看了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'}
>>>
Run Code Online (Sandbox Code Playgroud)
可以理解,该_meta属性没有记录,因为它是一个内部实现细节.我不能在短时间内看到它发生变化,所以使用它可能相对安全.你可以使用model_to_dict上面的函数作为你做你想做的事情的首发.不应该有太大的变化.如果计划递归地包括模型,请注意反向关系.
您可能还有其他途径可以调查.django-piston是一个RESTful框架,声明了emitters一些可能对您有用的框架,尤其是BaseEmitter.construct()方法.您应该能够非常轻松地定义DictionaryEmitter用于RESTful序列化以外的目的.
| 归档时间: |
|
| 查看次数: |
5499 次 |
| 最近记录: |