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で見つかった場合、changes_moderated_dictをstaff.profile.userキー/値のペアで更新します。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 に答える