2010-08-23 145 views
5

我如何迭代和检索Django模型的所有字段?Django模型迭代字段

我知道foo.item._meta.get_all_field_names()带给我所有的字段名称。 如何在模型实例上访问这些字段(包括其实际值)? (除正常记号foo.fieldname)。

我需要这个,以便为我的模型构建一个自定义输出,包括它的manyTomany关系。 任何想法?

回答

8

如何:

getattr(foo.__class__, <field_name>) 

这应该给你的域对象,而不是在给定的模型实例的值。如果你想现场在给定的模型insance值,你可以这样调用:

getattr(foo, <field_name>) 
+0

正如你刚才提到的那样,这只会返回字段对象。我需要给定模型实例的字段值。相应地编辑问题... – 2010-08-23 10:44:59

+0

我已经编辑了答案,希望这有助于。 – gruszczy 2010-08-23 10:50:59

2

这看起来丑陋,但它的工作:

for each in model_instance._meta.fields: 
    print each.value_from_object(model_instance) 

不过,我还有一个建议。鉴于您的要求是

为我的模型构建自定义输出,包括其许多关系的关系。

如何将实例转换为合适的格式(XML/JSON)然后处理?这可以避免依赖_meta或任何内部方法(可能会更改)。

+1

Manoj感谢您的补充。丑陋的人仍然不能解决我ManyToMany关系的问题:(我想我将不得不去串行化! – 2010-08-23 11:13:10