2013-07-25 106 views
3

我不能使函數getattr工作。這裏是我的代碼:django:getattr函數(獲取字段名稱)

print ConfigConsModel()._meta.get_all_field_names() #['codesectrepmodel', 'configCons', 'id'] 
modelInstance=ConfigConsModel() 
newAttrName1=getattr(modelInstance, "configCons") 
print newAttrName1 #empty -> PB 

怎麼了?

+0

'#empty - > PB'這是什麼意思? PB ==問題?什麼問題?空字符串,它不打印你所期望的...? –

+0

是PB表示問題,newAttrName1應該包含屬性「configCons」的名稱,而不是空字符串。 – rom

+2

不,'newAttrName1'包含'modelInstance.configCons'的值,顯然是空的,因爲您剛剛將'modelInstance'初始化爲空'ConfigConsModel' – vartec

回答

6
modelInstance=ConfigConsModel() 

這個初始化ConfigConsModel

newAttrName1=getattr(modelInstance, "configCons") 

這行modelInstance如新(空)實例相當於

newAttrName1=modelInstance.configCons 

它沒有得到屬性的名稱,它得到它的價值。當然是空的。

+2

如果我想獲取modelinstance.customer.name,該怎麼辦? – Clayton

+0

@傑克:你的意思是什麼? – vartec

+0

我的意思是,你正在模範領域?如果一個模型具有像ID,Name,Phone這樣的字段,這種技術就可以正常工作,但是如果我的模型有一個forghin密鑰,比如Customer? 我可能想要獲取客戶名稱? (model.customer.name) 但如果我給它像value = getattr(modelinstance,「customer.name」) 或 value = getattr(modelinstance,「customer__name」)它可能會在正常情況下(model.customer.name) 不工作,這種情況如何? – Clayton