我对模式创建感到困惑,所以你能否给我一个实现这个场景的想法
我有4种类型的用户学生,教师,家长和管理员
我试图为每个用户创建4个表,并为用户名,密码和令牌创建一个表,但我无法将此表与用户关联,因为多个用户不能拥有相同的用户名
我想要的是我需要用他们的用户名和密码验证每个用户,并且Student表可能与Parent表有关系!!!!
所以在验证时我需要知道他/她是哪种类型的用户
我正在使用python Django 1.9
答案 0 :(得分:1)
您只需添加一个反映用户user_type
的字段,而不是创建四个单独的表。
class CustomUser(AbstractBaseUser):
...
[other model fields]
...
USER_TYPE_CHOICES = (
('student', 'Student'),
('teacher', 'Teacher'),
('parent', 'Parent'),
('admin', 'Admin'),
)
user_type = models.CharField(choices=USER_TYPE_CHOICES, max_length=7)
通过这样做,所有用户都将拥有唯一的用户名,并且它们也将变得易于管理。
您只需访问其user_type
即可检查用户类型,它会返回此文本值之一“学生,教师,家长和管理员”。因此,您将能够处理不同用户类型的业务逻辑。
答案 1 :(得分:1)
您可以使用Django身份验证系统: Using the Django authentication system 对于您可以使用的每个用户类别:Groups
django.contrib.auth.models.Group
模型是对用户进行分类的通用方式,因此您可以申请 对这些用户的权限或其他标签。用户可以属于 任意数量的团体。
答案 2 :(得分:0)
创建四个表不是正确的方法。 或者你可以,
class User():
id = Column(PrimaryKey)
username = Column(String, constraints)
password = Column(String, constraints)
usertype = Column(Enum('student','teacher','parent','admin'))
- 代码仅用于表示。
要设置用户角色,您可以使用枚举属性。如果您使用的是SQLALchemy,请查看