2012-04-03 11 views
4

"バニラ"のPythonクラスを作成するときに、属性を割り当てるときにコードを実行する場合は、データを保持する "保護"(先頭にアンダースコア)属性を作成する通常のパターン、ゲッターとセッターを作成するにはpropertyを使用します。djangoフィールドの割り当てにフック

私がDjangoモデルでそれをしたいのであれば、それは魅力的ではありません。少なくとも、プロパティのアンダースコアバージョンで検索する必要があるからです。

Djangoのフィールド割り当てでコードを実行するには、どのような方法が推奨されますか?

これを行うための信号がありません。私が見ることができる唯一の他のアプローチは、追加のgetter/setterハンドラを登録できるカスタムフィールドを使用することです。

答えて

1

実際の「フィールド」がないため、非カスタムフィールドでは単純に行うことはできません。単純な属性であり、その背後にはクラスがありません。

カスタムフィールドクラスを定義し、to_pythonを上書きする必要があります。メタクラスをSubfieldBaseに設定することを忘れないでください。

1

ダーティフィールドが好きなようです。値が設定されたのとまったく同時に傍受することはできませんが、保存する前にフックすることができます。 http://code.activestate.com/pypm/django-dirtyfields/

また、@propertiesをsetメソッドで設定する必要があります。もちろんこれは、あなたの実際のdjango.db.models.fieldsフィールドをgetterとsetterで複製する必要があります。

関連する問題