我正在创建一个函数将模型对象转换为字典(并且所有foreignkeys
转换为更多字典,递归)。我从一位朋友那里了解到,我可以通过obj._meta.fields
查看模型的字段,但我无法在任何地方找到相关文档。
如何获取模型的字段?我怎样才能解释_meta
课程中可以找到的内容?
答案 0 :(得分:9)
这看起来相当有趣,所以我查看了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()
方法。您应该能够非常轻松地定义用于RESTful序列化以外目的的DictionaryEmitter
。
答案 1 :(得分:4)
There's some docs on it,但主要是我们倾向于使用内部使用的django函数,例如_meta.fields
或_meta.get_all_field_names()
,_meta.get_field_by_name
。
对我来说,这些最好通过iPython和标签完成来发现。或者来源。