2012-10-17 19 views
0

在我的ModelForm的save()方法,我訪問self.changed_data,我想這樣做:在模型的__dict__中解析外鍵屬性?

changes_moderated_dict.update(dict(
    [(i, staff.profile.user.__dict__[i]) 
    for i in changed_data 
    if i in staff.profile.user.__dict__])) 

其中如果該鍵被發現staff.profile.user鍵/值對更新changes_moderated_dict changed_data。 changes_moderated_dict基本上用於存儲在表單內對此特定模型所做的所有字段更改(以便後續處理和序列化)。

只要staff.profile.user不是一個外鍵關係,在這種情況下,該名稱具有_id後綴,並且不會與作爲屬性名稱的self.changed_data字段名稱匹配因爲它出現在模型中(沒有_id)。

有沒有辦法將模型的__dict__中的外鍵屬性解析爲實際名稱,以便上述方法仍然有效?

回答

1

我不知道什麼訪問user.__dict__的目標是什麼,但如果是檢查模型字段,你可以做這樣的事情:

u = staff.profile.user 
model_field_names = map(lambda f:f.name, u._meta.fields) 
changes_moderated_dict.update(dict(
    [(i, getattr(u, i, None)) 
    for i in changed_data 
    if i in model_field_names])) 
+0

謝謝,這個作品。 – mzu

相關問題