在我的项目中,我有两种不同类型的用户:教师和学生,每个用户都有自己的个人资料数据。
在寻找最佳方法之后,似乎前进的方法是使用多表继承:
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 中相同的功能:
- 创建配置文件
- 编辑个人资料
- 显示配置文件
当我在 of 中有正确的值时,我很清楚如何进行编辑和显示field profile
部分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()
当然也欢迎其他更好的方法!
谢谢!