0

UserProfileを作成し、AUTH_PROFILE_MODULEで定義することにより、django.contrib.auth.modelsから標準のユーザーモデルをカスタマイズしたアプリをリファクタリングしています。

問題は、UserProfileの属性が、ユーザーに表示される内容を決定するためにプロジェクト全体で使用されることです。

私はテストを作成し、このタイプのステートメントを繰り返し入力していました。

user = User.objects.get(pk=1)
user_profile = user.get_profile()

if user_profile.karma > 10:
    do_some_stuff()

これは面倒で、DRYの原則に違反していないかどうか疑問に思っています。

ユーザーが要求されたときにUserProfileデータを自動的にロードするカスタムUserManagerを作成する方が理にかなっていますか。

UserProfile属性を繰り返し処理して、それらをUserモデルに追加することもできます。これにより、コードを散らかすカスタムモデル属性へのすべての参照を更新する必要がなくなります。

もちろん、UserモデルとUserProfileモデルを正しく更新できるようにするには、プロセスを逆にする必要があります。

Django風のアプローチはどれですか?

4

1 に答える 1

1

get_profile()個人的には、ヘルパーは気にしません。UserUserProfile と set で1 対 1 のフィールドを使用するだけrelated_name='projname_profile'です。

次に、ORM マジックを使用して、1 つのリクエストですべてを取得できます (ただし、select_related は Django 1.2 以降で逆の 1-1 のみを選択すると思いますが、おそらくバックポートされた...):

user = User.objects.select_related().get(pk=1)
profile = user.projname_profile   # or just call it inline
于 2010-03-30T21:48:24.227 に答える