私のプロジェクトでは、教師と生徒の 2 種類のユーザーがいて、それぞれに独自のプロファイル データがあります。
最善のアプローチを探した後、先に進む方法はマルチテーブル継承を使用することです。
class BaseProfile(models.Model):
user = models.OneToOneField(User)
profile = models.CharField (max_length=10, choices={'teacher', 'student'})
# other common fields
class Teacher(BaseProfile):
# teacher specific fields
class Student(BaseProfile):
# student specific fields
そしてsettings.py
: AUTH_PROFILE_MODULE
= myapp.BaseProfile
.
ここで、django-profiles と同じ機能を実装したいと思います。
- プロファイルを作成する
- プロフィールを編集する
- プロフィールを表示する
field profile
ofに正しい値がある場合、編集と表示の部分を行う方法がよくわかりますBaseProfile
。
問題:
ここで、シグナルを使用してユーザーが作成されたときに、プロファイルの作成を自動的に (そして適切な db:Teacher
またはでStudent
) 直接行いたいと考えています。profile
ユーザーが登録フォームを介してサイトから登録する場合、フィールドには値「学生」が含まれている必要があります。管理者が管理インターフェイスを介して新しいユーザーを作成する場合、値は「教師」である必要があります。
どうすればこれを達成できるか考えている人はいますか? おそらく、以下のようなカスタム シグナルを作成し、ユーザー モデルから送信する必要がありますが、まだ有効な解決策が見つかりませんでした。
def create_user_profile(sender, instance, request, **kwargs):
if request.user.is_staff:
BaseProfile(user=instance, profile='teacher').save()
else:
BaseProfile(user=instance, profile='student').save()
もちろん、他のより良いアプローチも大歓迎です!
ありがとう!