こんにちは、python と django の初心者です。現在のユーザー プロファイルを取得するビューが必要です。User から get_profile を使用する必要があることはわかっていますが、使用方法がわかりません。私はdjangoのドキュメントを読みましたが、役に立ちませんでした。これは私がdocから見つけたものです:
from django.contrib.auth.models import User
profile=request.user.get_profile()
こんにちは、python と django の初心者です。現在のユーザー プロファイルを取得するビューが必要です。User から get_profile を使用する必要があることはわかっていますが、使用方法がわかりません。私はdjangoのドキュメントを読みましたが、役に立ちませんでした。これは私がdocから見つけたものです:
from django.contrib.auth.models import User
profile=request.user.get_profile()
Django のドキュメントには、特にユーザーに関する追加情報を保存する部分がすべて記載されています。models.py
最初に、ユーザーの追加情報のために with フィールドのどこかにモデルを定義する必要があります。
models.py
from django.contrib.auth.models import User
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
accepted_eula = models.BooleanField()
favorite_animal = models.CharField(max_length=20, default="Dragons.")
UserProfile
次に、 内で次のように設定して、このモデル ( ) がユーザー プロファイルであることを示す必要がありAUTH_PROFILE_MODULE
ますsettings.py
。
設定.py
...
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
...
accounts
アプリの名前に置き換える必要があります。最後に、ハンドラーUser
を登録してインスタンスが作成されるたびにプロファイルを作成する必要がありpost_save
ます。この方法では、ユーザーを作成するたびに Django もプロファイルを作成します。
models.py
from django.contrib.auth.models import User
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
accepted_eula = models.BooleanField()
favorite_animal = models.CharField(max_length=20, default="Dragons.")
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
ビューで現在のユーザーのプロファイルにアクセスするにはUser
、リクエストによって提供されたインスタンスを使用し、その上でget_profileを呼び出します。
def your_view(request):
profile = request.user.get_profile()
...
# Your code
基本的に、djangoユーザーモデルはフィールド(名、姓、メール、パスワード、is_staff、is_active、last_login)にのみアクセスを提供します。
ただし、このモデルにフィールドを追加する場合、たとえば、すべてのユーザーにdateofbirthという名前の新しい列を追加する必要がある場合は、DOBという名前の列をユーザーモデルに追加する必要があります。ただし、djangoユーザーモデルを編集できないため、これは不可能です。
これを達成するには
1.ユーザーモデルの列が新しいテーブルの列にマップされるように、電子メールIDとDOB列を持つ別の新しいテーブルを作成できます。ただし、これにより、dbリクエストごとに新しいdbインスタンスが作成されます。顧客の生年月日を見つけたい場合は、次のように言います。
2番目の方法では、
djangoユーザーモデルを使用する代わりに、必要なすべてのフィールドを備えた独自のカスタマイズモデルを使用してください。ただし、セキュリティに関連する更新やdjangoユーザーモデルの拡張が行われた場合、それを直接使用することはできません。最後に(カスタマイズモデルを使用する場合は常に)コードをさらに変更する必要があります。これは、開発者がコードを特定して変更を加えるのに少し苦労します。
上記の問題を克服するために、djangoは非常にシンプルで柔軟性のあるdjangoプロファイルを導入しています。利点は次のとおりです
これを使用する方法:
settings.pyで、変数AUTH_PROFILE_MODULE= "appname.profiletable"を作成します
たとえば、DOB、emailidを持つ新しいテーブルエクストラユーザーを作成しました。顧客の生年月日を見つけるには、
a=User.objects.get(email='x@x.xom')
a.get_profile().DOB will give the dateofbirth value from extrauser table.
上記の詳細が、djangoプロファイルを理解する上で明確になることを願っています。さらにサポートが必要な場合は、お知らせください。プロジェクトでdjangoプロファイルを使用しました。
古い質問ですが、今日それを見ている人は誰でもこれから恩恵を受けるかもしれないと思いました:
Django 1.5 では、User モデルを簡単に拡張できる機能が追加されました。扱うオブジェクトが 2 つではなく 1 つになったので、これが望ましい場合があります。より現代的な方法のようです。
設定により、どのクラスが「プロファイル」であるかを指定する必要がありますAUTH_PROFILE_MODULE = 'accounts.UserProfile'
(例)