【问题标题】:Django -- Teacher Student advice?Django——老师学生的建议?
【发布时间】:2015-06-03 16:05:42
【问题描述】:

我是 Django 新手,正在尝试为师生关系建立模型。教师和学生都可以访问任何给定课程的课程材料。老师在一个课程中会有很多学生,每个学生会有很多老师(取决于他们上多少门课程)。我现在已经设置好了:我在正确的轨道上吗?

class CourseWare(models.Model):
    #information goes here?
    instructor = models.ForeignKey(Instructor)
    TrainingManager = models.ForeignKey(TrainingManager)

class Instructor(models.Model):
    firstName = models.CharField(max_length=30, blank=True, null=True)
    lastName = models.CharField(max_length=30, blank=True, null=True)
    material = models.ForeignKey(courseWare) #instructor deals with one course
    def __unicode__(self):
        return u's_' + self.firstName + u' ' + self.lastName

class Student(models.Model):
    firstName = models.CharField(max_length=30, blank=True, null=True)
    lastName = models.CharField(max_length=30, blank=True,null=True)
    instructors = models.ManyToManyField(Instructor) #Many Instructors <-> Many Students?
    material = models.ForeignKey(CourseWare)
    terminationDate = models.DateField()

【问题讨论】:

  • 我投票结束这个问题,因为“我这样做对吗?”问题属于Code Review
  • @MattBall 仅当此代码经过测试并且可以工作
  • @MattBall 我不知道那是一回事。我一直在这里看到这样的问题;真的不知道我的代码结构是否正确。
  • @plesh 您的代码是否按照您的预期执行?如果是,那么 codereview 可以帮助改进它,并就如何更好地处理它提供建议(即更干净、以更易读的方式等)。如果您的代码没有按预期运行,那么这是正确的地方。但在后一种情况下,请解释它为什么不适合你。
  • 我在这里有点困惑。你的Student 型号在哪里?你的Course 型号在哪里?您的代码似乎与您的描述大相径庭。

标签: python django models


【解决方案1】:

由于您的教师只能教授一门课程,我会这样做:

class Course(models.Model):
    instructor = models.OneToOneField(Instructor, related_name='course')
    training_manager = models.ForeignKey(TrainingManager)

    students = models.ManyToManyField(Course, related_name='courses')

class Instructor(models.Model):
    first_name = models.CharField(max_length=30, blank=True, null=True)
    last_name = models.CharField(max_length=30, blank=True, null=True)

class Student(models.Model):
    first_name = models.CharField(max_length=30, blank=True, null=True)
    last_name = models.CharField(max_length=30, blank=True, null=True)

    termination_date = models.DateField()

related_name 关键字参数可让您反向查询。例如,some_student.courses.all()

【讨论】:

  • 嗯,有道理。是否不需要创建将学生与教师相关联的属性?即讲师 = models.ManyToManyField(Instructor) 作为学生课程的一部分?