如何获取对象的字段?

Cla*_*diu 7 python database django orm

我正在创建一个函数将模型对象转换为字典(并且所有foreignkeys字典都是递归的).我从朋友那里了解到我可以通过查看获得模型的字段obj._meta.fields,但我无法在任何地方找到相关文档.

我如何获得模型的字段?我怎样才能解释在_meta课堂上可以找到什么?

Jos*_*ton 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'}
>>> 
Run Code Online (Sandbox Code Playgroud)

可以理解,该_meta属性没有记录,因为它一个内部实现细节.我不能在短时间内看到它发生变化,所以使用它可能相对安全.你可以使用model_to_dict上面的函数作为你做你想做的事情的首发.不应该有太大的变化.如果计划递归地包括模型,请注意反向关系.

您可能还有其他途径可以调查.django-piston是一个RESTful框架,声明了emitters一些可能对您有用的框架,尤其是BaseEmitter.construct()方法.您应该能够非常轻松地定义DictionaryEmitter用于RESTful序列化以外的目的.


Yuj*_*ita 5

有一些关于它的文档,但大多数情况下我们倾向于找到内部使用的 django 函数的用途,例如_meta.fieldsor _meta.get_all_field_names(), _meta.get_field_by_name

对我来说,最好通过 iPython 和选项卡完成来发现这些。或者来源。