Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python django中的基本组层次结构_Python_Django_Python 3.x_Django Models_Hierarchical Data - Fatal编程技术网

python django中的基本组层次结构

python django中的基本组层次结构,python,django,python-3.x,django-models,hierarchical-data,Python,Django,Python 3.x,Django Models,Hierarchical Data,我正在使用django建立一个学生注册系统。基于对象级权限,学生只能由其班主任和校长查看。有学校、班级和学生模型。每所学校可以有一名以上的校长,每个班级可以有一名以上的班主任 将有两个对象级权限: 校长可以看到所有注册到学校的学生。他们将无法看到其他学校的学生 班主任将能够看到注册到他们班级的学生。他们将无法看到学生注册到同一或不同学校的其他班级 我搜索了各种第三方django库,以实现这样的分层用户组体系结构。我看到了,但我的问题有点复杂。然后,我决定使用的功能,并提出了模型实现,例如: 来自

我正在使用django建立一个学生注册系统。基于对象级权限,学生只能由其班主任和校长查看。有
学校
班级
学生
模型。每所学校可以有一名以上的校长,每个班级可以有一名以上的班主任

将有两个对象级权限:

  • 校长可以看到所有注册到学校的学生。他们将无法看到其他学校的学生
  • 班主任将能够看到注册到他们班级的学生。他们将无法看到学生注册到同一或不同学校的其他班级
  • 我搜索了各种第三方django库,以实现这样的分层用户组体系结构。我看到了,但我的问题有点复杂。然后,我决定使用的功能,并提出了模型实现,例如:

    来自django.contrib.auth.models导入组的
    
    从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组,而是覆盖了内置的django
    User
    模型。我还学习了教程,这对我很有帮助。我最新版本的
    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
    实例,用于登录用户)。顺便问一下,这个学生不是来上课的吗