我有来自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:我需要用户,教师和学生三种不同的授权。所以他们都不能抽象。
答案 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并删除继承。