【问题标题】:Associate Python / Django model objects with users将 Python / Django 模型对象与用户关联
【发布时间】:2015-07-03 06:33:22
【问题描述】:

我是 Django 和 Python 的新手,所以如果这是一个非常简单的问题,我深表歉意。我正在为我儿子的小学建立一个应用程序。该项目的第一站是为家长提供在线访问权限,以便与孩子的老师进行交流,反之亦然。我已经创建了下面显示的模型,这些模型将允许数据库中的关系,但我需要能够使教师和家长用户以及基于他们的组角色的有限访问权限。下面是我的模型代码。

基本思想是教师和家长都与学生模型有很多关系。教师将能够登录他们的门户并添加属于他们班级的学生。父母将连接到学生,然后学生将提供与老师的连接。现在作为用户,家长和老师可以来回发送通信。

如果这有任何意义,任何帮助或反馈都会很棒。哦,我知道我需要导入 auth.models,只是不知道如何或是否可以连接到老师和家长课程。谢谢。

from django.db import models


class Student(models.Model):
    student_first = models.CharField(max_length=30)
    student_last = models.CharField(max_length=30)

    def __str__(self):
        return "%s %s" % (self.student_first, self.student_last)


class Teacher(models.Model):
    teacher_first = models.CharField(max_length=30)
    teacher_last = models.CharField(max_length=30)
    teacher_email = models.EmailField()
    students = models.ManyToManyField(Student)

    def __str__(self):
        return "%s %s" % (self.teacher_first, self.teacher_last)


class Parent(models.Model):
    parent_first = models.CharField(max_length=30)
    parent_last = models.CharField(max_length=30)
    parent_email = models.EmailField()
    students = models.ManyToManyField(Student)

    def __str__(self):
        return "%s %s" % (self.parent_first, self.parent_last)

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    由于教师和家长都有相同的字段,我会选择一个通用模型。此外,两者都是用户,因此请创建一个 OneToOneFieldAUTH_USER_MODEL(提供名字、姓氏和电子邮件)。

    class Profile(models.Model):
        '''
        Teacher or  Parent
        '''
        user = models.OneToOneField(settings.AUTH_USER_MODEL,
        primary_key=True)
    
        students = models.ManyToManyField(Student)
    

    只需在注册期间将它们分配给适当的家长/教师组,以便您可以通过group 限制访问。

    【讨论】:

    • 这看起来比拥有两个单独的类要干净得多。这么晚才回复很抱歉。我将实施此方法并报告结果。谢谢。
    • 抱歉延迟回复,但这让我到达了我需要去的地方。我全神贯注于过度思考解决方案。谢谢。
    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2016-04-05
    • 2014-04-06
    • 2019-11-24
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多