0

在我的 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__ 中的外键属性解析为其实际名称,以便上述方法仍然有效?

4

1 回答 1

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]))
于 2012-10-17T08:53:04.400 回答