Django下的数据库设计

时间:2013-01-20 19:43:02

标签: django database-design

我有一个非常基本的问题:我目前正在为我的课程中的学生和他们的分数建立一个数据库。我目前在models.py中有两个主要类:学生(包含他们的姓名,身份证,电子邮件地址等)和课程(包含一个id,它运行的年份和评估信息 - 例如“Essay”“40% “”演示文稿“”10%“”考试“”50%“)。当然,学生有一个ManyToMany字段,这样我就可以为学生分配课程,反之亦然。我必须能够添加和修改这些东西。

现在,显然,我希望能够为不同作业中的学生添加标记(不同的课程与课程不同)。由于我对数据库编程非常缺乏经验,所以我希望你们中的一位能给我一个提示,告诉我如何在我的模型中进行设置。

谢谢, 托比

3 个答案:

答案 0 :(得分:1)

或许要解决这个问题的方法就是有一个单独的分配类,就像这样。

class Assignment(models.Model):
    ASSIGNMENT_TYPES = (
        ('essay', "Essay"),
        ...
    )
    ASSIGNMENT_GRADES = (
        ('a+', "A+"),
        ('a', "A"),
        ...
    )
    student = models.ForeignKey("Student")
    course = models.ForeignKey("Course")
    assignment_type = models.CharField(choices=ASSIGNMENT_TYPES, max_length=15, default='essay')
    progress = models.IntegerField()
    grade = models.CharField(choices=ASSIGNMENT_GRADES, max_length=3, default="a+")

通过这种方式,您可以将一个作业连接到一个学生和一个课程。如果每个作业有多个学生,可以通过添加另一个类(例如StudentGroup)并将其包含在模型中来相对容易地进行修改。

希望这有助于:)

答案 1 :(得分:0)

创建一个名为“Assessments”的模型,该模型具有Course的外键。此外,创建一个名为“评估类型”的字段,另一个称为“评估结果”,最后一个名为“评估日期”。应该是这样的:

ASSESSMENTS = (('E','Essay'),('P','Presentation'))

class Assessment(models.MOdel):
    course = models.ForeignKey('Course')
    assessment = models.CharField(choices=ASESSMENTS)
    result = models.CharField(max_length=250)
    taken_on = models.DateField()
    overall_result = models.BooleanField()
    is_complete = models.BooleanField()

每次考试时,您都会在此表中填写每项评估的记录。您可以将整体结果用作标记,以查看学生是否已通过或失败,并使用is_complete查看是否有任何课程待学考试。

答案 2 :(得分:0)

您应该查看classcommmodels.py个文件, 用Django编写的内容管理系统,用于在Web上交付和管理课程。

它有以下模型

  1. 讲师
  2. 明导
  3. 注册
  4. 分配
  5. DueDateOverride
  6. 提交
  7. 等级
  8. ExtraCredit
  9. 信息
  10. 资源
  11. 公告
  12. 你可能不需要这种复杂的关系,但它正在研究models design

    您可以在此项目的homepage中找到更多详细信息。