python django中的基本组层次结构
我正在使用django建立一个学生注册系统。基于对象级权限,学生只能由其班主任和校长查看。有python django中的基本组层次结构,python,django,python-3.x,django-models,hierarchical-data,Python,Django,Python 3.x,Django Models,Hierarchical Data,我正在使用django建立一个学生注册系统。基于对象级权限,学生只能由其班主任和校长查看。有学校、班级和学生模型。每所学校可以有一名以上的校长,每个班级可以有一名以上的班主任 将有两个对象级权限: 校长可以看到所有注册到学校的学生。他们将无法看到其他学校的学生 班主任将能够看到注册到他们班级的学生。他们将无法看到学生注册到同一或不同学校的其他班级 我搜索了各种第三方django库,以实现这样的分层用户组体系结构。我看到了,但我的问题有点复杂。然后,我决定使用的功能,并提出了模型实现,例如: 来自
学校
、班级
和学生
模型。每所学校可以有一名以上的校长,每个班级可以有一名以上的班主任
将有两个对象级权限:
从django.db导入模型
进口mptt
从mptt.fields导入树键
TreeForeignKey(组,on_delete=models.CASCADE,blank=True,
null=True)。将\u贡献给\u类(组“父级”)
mptt.register(组,顺序插入方式=['name'])
班级学校(模型。模型):
“学校对象”
name=models.CharField(最大长度=255)
组=models.ForeignKey(
组,相关的\u name='school',在\u delete=models.CASCADE上)
类别(models.Model):
“类对象”
name=models.CharField(最大长度=255)
组=models.ForeignKey(
组,相关的\u name='class',在\u delete=models.CASCADE上)
学校=models.ForeignKey(
学校
on_delete=models.CASCADE
)
班级学生(模型。模型):
“个人对象”
fullname=models.CharField(最大长度=255)
class=models.ForeignKey(
类,
on_delete=models.CASCADE
)
这样,每个学校
和类
对象都将有自己的组
s,学校组是该特定学校的类组的家长。因此,我现在可以使用django的User
创建学校校长用户,并将其分配给相关的家长组。通过同样的方法,我还可以创建教师用户,并将其分配给其类对象的子组。当学校校长或班主任想要查看他们注册的学生时,我可以通过过滤他们的用户组来应用对象级权限
我的问题是,这样做对吗?为每个学校/班级对象创建一个组是否有意义?感谢的建议,我没有使用内置的django组,而是覆盖了内置的django用户
模型。我还学习了教程,这对我很有帮助。我最新版本的models.py
如下所示(别忘了覆盖默认的User
类,您需要通过将AUTH\u User\u MODEL='myapp.User'
添加到settings.py
文件中,让django知道这一点):
来自django.conf导入设置的
从django.contrib.auth.models导入AbstractUser
从django.db导入模型
类用户(抽象用户):
“”“带有额外类型字段的自定义用户模型”“”
用户类型选择=(
(1,“超级用户”),
(2,“校长”),
(3,“教师用户”),
)
用户类型=模型。阳性AllintegerField(选项=用户类型\u选项)
班级学校(模型。模型):
“学校对象”
name=models.CharField(最大长度=255)
users=models.ManyToManyField(settings.AUTH\u USER\u MODEL)
类别(models.Model):
“类对象”
name=models.CharField(最大长度=255)
users=models.ManyToManyField(settings.AUTH\u USER\u MODEL)
学校=models.ForeignKey(
学校
on_delete=models.CASCADE
)
班级学生(模型。模型):
“个人对象”
fullname=models.CharField(最大长度=255)
class=models.ForeignKey(
类,
on_delete=models.CASCADE
)
感谢的建议,我没有使用内置的django组,而是覆盖了内置的djangoUser
模型。我还学习了教程,这对我很有帮助。我最新版本的models.py
如下所示(别忘了覆盖默认的User
类,您需要通过将AUTH\u User\u MODEL='myapp.User'
添加到settings.py
文件中,让django知道这一点):
来自django.conf导入设置的
从django.contrib.auth.models导入AbstractUser
从django.db导入模型
类用户(抽象用户):
“”“带有额外类型字段的自定义用户模型”“”
用户类型选择=(
(1,“超级用户”),
(2,“校长”),
(3,“教师用户”),
)
用户类型=模型。阳性AllintegerField(选项=用户类型\u选项)
班级学校(模型。模型):
“学校对象”
name=models.CharField(最大长度=255)
users=models.ManyToManyField(settings.AUTH\u USER\u MODEL)
类别(models.Model):
“类对象”
name=models.CharField(最大长度=255)
users=models.ManyToManyField(settings.AUTH\u USER\u MODEL)
学校=models.ForeignKey(
学校
on_delete=models.CASCADE
)
班级学生(模型。模型):
“个人对象”
fullname=models.CharField(最大长度=255)
class=models.ForeignKey(
类,
on_delete=models.CASCADE
)
除了筛选的数据库查询,您还需要什么吗?F.ex。(对模型进行了明显更改)Student.objects.filter(class\uu teacher=teacher)
或Student.objects.filter(class\uu school\uu principal=principal)
。(request.User
中的teacher
和principal
可能User
实例,用于登录用户)。顺便问一下,这个学生不是来上课的吗