2010-08-23 190 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