如何获取对象的字段?

时间:2011-03-20 21:13:00

标签: python django database orm

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

如何获取模型的字段?我怎样才能解释_meta课程中可以找到的内容?

2 个答案:

答案 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和标签完成来发现。或者来源。