カスタムユーザーモデルを参照する処理を行う必要があるdjangoモデルが1つあります。
クラスのロード順序が不明なため、クラスのロード時にこのモデルのクラスを操作できません。
したがって、実行時にいくつかのクラス属性を追加する必要があります。現時点では、次のように追加してい__init__
ます__new__
。
def __new__(cls, *args, **kwargs):
# hack to avoid INSTALLED_APPS initialization conflicts.
# get_user_model() can't be called from this module at class loading time,
# so some class attributes must be added later.
# Metaclasses could me more appropiate but I don't want to override
# dango's metaclasses.
if not hasattr(cls, '_reverse_field_name_to_user'):
cls._find_reverse_field_name_to_user()
return Group.__new__(cls, *args, **kwargs)
機能しますが、見栄えが悪いので@lazyclassproperty
、これらの属性に次のようなものを使用することを考えました。
私はいくつか@classproperty
の@lazyproperty
デコレーターを見つけましたが、両方のデコレーターを見つけたわけではなく、自分で作成する方法がわかりません。
質問: そのようなデコレータをどのようにコーディングできますか? または、私の現在のばかげた実装に代わる別のよりクリーンな代替案を提案してください。