【发布时间】:2020-04-26 16:31:45
【问题描述】:
我正在使用以下用户类型制作一个小型测试项目:学校管理员、教师、学生、家长。 并且每种用户类型将具有不同的权限,例如学校管理员具有完全访问权限...家长只能查看他们孩子的活动。教师可以查看所有学生,但只能为各自的学生添加/编辑分数。教师可以设置考试等。学生可以参加考试并提交考试,但不能编辑/添加任何其他信息。只是可以编辑他的个人资料详细信息。
方法 1:我是否需要创建一个自定义用户类并应用于每种用户类型(即一个自定义类..和 4 个用户类型类).. 并且类似地有 4 个不同的视图和 html 页面?
方法 2:只有一个客户类和一个带有 UserType 的字段,该字段将具有“SchoolAdmin”、“Teacher”、“Student”、“Parent”.. 以及一个视图和 html(作为数据页将保持不变,只有数据记录会受到限制),并以某种方式识别视图中的用户类型,并过滤记录?
当然,某些视图或 html 页面将特定于我能够处理的一种用户类型,问题是使用相同的视图/html 页面来处理所有用户类型。
请建议...任何代码 sn-p 都会更有帮助。
# models.py
---------------------
class CustomUser(AbstractUser):
USER_TYPE_CHOICES = (
('SchoolAdmin'),
('Teacher'),
('Student'),
('Parents'),
)
user_type = models.CharField(blank=False, choices=USER_TYPE_CHOICES)
name = models.CharField(blank=False, max_length=255)
country = models.CharField(blank=False, max_length=255)
city = models.CharField(blank=False, max_length=255)
phone = models.CharField(blank=True, max_length=255)
created_at = models.DateField(auto_now_add=True)
def __str__(self):
return self.name
class SchoolAdmin(models.Model):
user = models.OneToOneField(
CustomUser, on_delete=models.CASCADE, primary_key=True)
class Teacher(models.Model):
user = models.OneToOneField(
CustomUser, on_delete=models.CASCADE, primary_key=True)
photo = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
class Student(models.Model):
user = models.OneToOneField(
CustomUser, on_delete=models.CASCADE, primary_key=True)
teacher = models.ForeignKey(Teacher)
photo = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
class Parent(models.Model):
user = models.OneToOneField(
CustomUser, on_delete=models.CASCADE, primary_key=True)
student= models.ForeignKey(Student)
【问题讨论】:
标签: python django django-views multi-user