モデルに便利/モデル メソッドを追加したいdjango.contrib.auth.models.User
。前回チェックしたとき、 User モデルを拡張することは悪い習慣と見なされていたので、これを行うためのベストプラクティスは何ですか.
別のカスタムUserProfile
モデルがあります。すべてのユーザー関連の便利なメソッドにそれを使用する必要がありますか?
モデルに便利/モデル メソッドを追加したいdjango.contrib.auth.models.User
。前回チェックしたとき、 User モデルを拡張することは悪い習慣と見なされていたので、これを行うためのベストプラクティスは何ですか.
別のカスタムUserProfile
モデルがあります。すべてのユーザー関連の便利なメソッドにそれを使用する必要がありますか?
モデルに何を追加しようとしているかによって異なります。ユーザーに関する情報を追加したい場合は、一般的に次のUserProfile
方法を使用することをお勧めします: http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
ただし、モデルにカスタム メソッドまたはマネージャーを追加するだけの場合はUser
、次のようにプロキシ モデルを使用する方がより論理的です。
from django.contrib.auth.models import User
class UserMethods(User):
def custom_method(self):
pass
class Meta:
proxy=True
プロキシ モデルは、元のモデルと同じデータベース テーブルで動作するため、モデルを物理的に拡張することなくカスタム メソッドを作成するのに理想的です。User
ビュー内の への参照を に置き換えるだけUserMethods
です。(もちろん、モデルの登録を解除User
し、代わりにプロキシ モデルを登録することで、管理ツールでこれを使用できます。)
作成された元のモデルのインスタンスは、User
モデルを介して即座にアクセスでき、UserMethods
その逆も同様です。詳細はこちら: http://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models
(注: プロキシ モデルには Django 1.1 以降が必要です)
User モデルにカスタム メソッドを追加する場合は、monkey_patchingをお勧めします。
::monkey_patching.py
のいずれかにファイルを作成しますapps
#app/monkey_patching.py
from django.contrib.auth.models import User
def get_user_name(self):
if self.first_name or self.last_name:
return self.first_name + " " + self.last_name
return self.username
User.add_to_class("get_user_name",get_user_name)
__init__.py
アプリのファイルにインポートします。すなわち::
#app/__init__.py
import monkey_patching
はい。ユーザーモデルに .get_profile() 関数がアタッチされている場合、基盤をいじる必要はありません。
2013 更新:
1.5 では、カスタム User モデルに置き換えて、必要なものを追加できますhttps://docs.djangoproject.com/en/dev/topics/auth/customizing/#auth-custom-user
私は、開発したさまざまなプロジェクトで同じ UserProfile を使用し、プロジェクト固有のニーズに合わせて User を拡張することを好みます。したがって、一般的な機能は UserProfile に移動し、プロジェクト固有の機能はカスタム ユーザーに移動します。サブクラス化された User モデルを使用することによる悪影響はまだありません。Django 1.0+ にはまだ存在するのでしょうか。