如何从User实例创建MyUser实例?

时间:2016-04-12 07:54:07

标签: django django-models django-users

我有来自AbstractBaseUser的自定义用户模型,而用户模型不是抽象的。然后我从用户创建了两个模型,学生和教师。

现在我有一些用户都是老师和学生,所以我尝试过这样的事情:

IntegrityError: duplicate key value violates unique constraint "users_username_key"
DETAIL:  Key (username)=() already exists.

但是得到错误:

username

django.contrib.auth.models.User此处与teacher = get_or_404(Teacher, args); login(teacher)中的work_email=CharField(unique=True,...)相同,但不可为空。

教师模型主要用于存储用户的教师档案,学生也是如此。但我也在不同的登录视图中使用Them,如start_teaching_time。学生将拥有完全不同的身份验证方法。

教师模型有一些不同的字段,如student_id=CharField(unique=True)primary_school_entering_time,学生有rtrim($string, ','); UIAlertAction

PS:我需要用户,教师和学生三种不同的授权。所以他们都不能抽象。

2 个答案:

答案 0 :(得分:1)

我认为问题在于用户只能是其中一个。用户可以是教师,也可以是学生但不能同时使用。

我建议用户不抽象并从那里开始工作。然后,您将拥有从用户到教师和学生的关系,您可以根据自己的喜好进行操作。

答案 1 :(得分:0)

我猜你的模型看起来像这样。

class User(...):
    username = models.Charfield(unique=True, ...)

class Teacher(User, models.Model):
    teacher_field1 = models.CharField(...)

class Student(User, models.Model):
    student_field1 = models.CharField(...)

所以,如果你要在数据库中看到结构,它就像是

用户表:

| id | username | ...
| 1  | teacher  | ...
| 2  | student  | ...

教师表:

| user_ptr_id | teacher_field1 | ...
|     1       |   sample_text  | ...

学生表:

| user_ptr_id | teacher_field1 | ...
|     2       |   sample_text  | ...

在数据库级别,此结构解决了您的问题,但在Django ORM级别,这不会起作用。因此,为了让用户既可以作为教师也可以作为学生,您需要在Student和Teacher模型中拥有用户模型的OneToOneField并删除继承。

相关问题