解析模型__dict__中的外键属性?

时间:2012-10-17 08:42:41

标签: django django-models

在我的ModelForm的save()方法中,我正在访问self.changed_data,我想做类似的事情:

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

如果在changed_data中找到密钥,则使用staff.profile.user键/值对更新changes_moderated_dict。 changes_moderated_dict主要用于存储表单内对此特定模型所做的所有字段更改(以便以后处理和序列化)。

只要staff.profile.user不是外键关系,就可以正常工作,在这种情况下,字段名称的后缀为_id,并且与self.changed_data字段名称不匹配,属性名称为它出现在模型中(没有_id)。

有没有办法将模型的__dict__中的外键属性解析为它的实际名称,以便上述方法仍然有效?

1 个答案:

答案 0 :(得分: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]))