Django在向后关系中查看外键

时间:2014-08-19 21:53:34

标签: django django-views

我有这些模特:

每个学生都有一位私人教师:

class Student(models.Model):
    name= models.CharField(max_length=200, default='', blank=True)
    group= models.CharField(max_length=200, default='', blank=True)
    teacher= models.ForeignKey(Teacher, null=True, blank=True)
    session = models.IntegerField(default=99, blank=True)
    def __str__(self):
        return self.name

老师可以在一,二,三,四课教授。

class Teacher(Employe):
    ...
    session1 = models.NullBooleanField(default='', blank=True)
    session2 = models.NullBooleanField(default='', blank=True)
    session3 = models.NullBooleanField(default='', blank=True)
    session4 = models.NullBooleanField(default='', blank=True)

    def __str__(self):
        return self.name

每个教室只有一名教师参加该特定课程。

class Classroom(models.Model):
    code = models.CharField(max_length=10, default='', blank=True)
    teacherSession1 = models.ForeignKey(Teacher, null=True, blank=True, related_name='S1')
    teacherSession2 = models.ForeignKey(Teacher, null=True, blank=True, related_name='S2')
    teacherSession3 = models.ForeignKey(Teacher, null=True, blank=True, related_name='S3')
    teacherSession4 = models.ForeignKey(Teacher, null=True, blank=True, related_name='S4')

    def __str__(self):
        return self.code

我想构建一个输出类似的东西:

学生姓名,学生组,课堂(会议1至4)

到目前为止,我已经想出了这个,但我很难获得课堂代码。

def list_student_plan(session):
    my_list = Student.objects.values('name', 'group', 'teacher__name').filter(Q(session=session))
    return my_list

1 个答案:

答案 0 :(得分:1)

这是我推荐的型号

class Groups(models.Model):

    name    = models.CharField(max_length=200)
    description   = models.CharField(max_length=255, blank=True)


    def __str__(self):
        return self.name

学生模特

class Student(models.Model):

    name    = models.CharField(max_length=200, default='', blank=True)
    group   = models.ForeignKey(Groups, null=True, blank=True, unique=False)

    def __str__(self):
        return self.name

代码模型

class Code(models.Model):
     name = models.CharField(max_length=200)
     code = models.CharField(max_length=25)
     description = models.CharField(max_length=255)

def __str__(self):
    return self.name

教师模型

class Teacher(models.Model):
     name = models.CharField(max_length=200)
     code = models.ForeignKey(Code, unique=False)

def __str__(self):
    return self.name + " " + self.code.name

会话

class Sessions(Employe):
     teacher = models.ForeignKey(Teacher, unique=False)
     student = models.ForeignKey(Student, unique=False)
     session = models.IntegerField(null=True, blank=True)

def __str__(self):
    return self.teacher.name + ' ' + self.student.name

现在使用" Sessions"将帮助您更好地管理会话将包含值的位置 在1-4之间(可能更多 - 想象一下如果你在一天中增加了一段时间)。通过老师,您将获得一个代码,您可以拥有多个具有多个代码的教师,或者具有多个代码的同一个教师。我希望这能让你朝着正确的方向前进,我认为这是一个更清洁的方法来解决这个问题,让我知道如果你有任何问题,我会添加更多的细节。