我正在制作一个函数,将模型对象转换为字典(并将所有 foreignkeys
递归地转换为更多字典)。我从一个 friend 那里了解到,我可以通过查看 obj._meta.fields
来获取模型的字段,但我无法在任何地方找到这方面的文档。
如何获取模型的字段?如何解释可以在 _meta
类中找到的内容?
最佳答案
这看起来相当有趣,所以我查看了 django.forms 源代码,专门寻找 ModelForm 实现。我认为 ModelForm 会非常擅长自省(introspection)给定的实例,而且碰巧有一个方便的函数可以帮助您。
>>> 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 框架,它声明了几个可能对您有用的 emitter
,尤其是 BaseEmitter.construct()
方法。您应该能够很容易地定义一个 DictionaryEmitter
用于 RESTful 序列化以外的目的。
关于python - 如何获取对象的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371531/