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