2

カスタムユーザーモデルを参照する処理を行う必要がある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デコレーターを見つけましたが、両方のデコレーターを見つけたわけではなく、自分で作成する方法がわかりません。

質問: そのようなデコレータをどのようにコーディングできますか? または、私の現在のばかげた実装に代わる別のよりクリーンな代替案を提案してください。

4

1 に答える 1