将问题存储在数据库中的最佳方法是什么?存储学生的结果是什么?

时间:2018-04-01 19:11:04

标签: django database django-models django-admin database-schema

我正在设计一个数据库来存储考试问题和学生反对考试的结果。

Question_Meta [exam_id,question_no,question_type,marks]
我创建了这个表,它将存储问题数据

MultiPart_Question [question_meta_id,part_number,marks]
但是为了处理多个子问题的问题,我创建了这个表,它将有一个来自 Question_Meta 表和子问题详细信息的外键。

Exam_Result [exam_id,student_id,question_meta_id,obtain_marks]   以问题为基础存储学生的分数。

Exam_Result_MultiPart [multipart_question_id,student_id,obtain_marks]
以子问题为基础存储标记。

现在我必须在 django admin 中显示完整的考试成绩,但我不知道如何结合来自 Exam_Result Exam_Result_MultiPart 表格。需要在列表视图页面上显示的信息应包含考试,问题编号,子问题编号,学生,标记列。我怎样才能在django管理员中实现这一目标?

如果我在设计数据库模式时使用了正确的方法,请指导我吗?感谢

1 个答案:

答案 0 :(得分:1)

如果Exam_Result_MultiPart可以引用其父Exam_Result,那么您就可以实现所需的目标。

class Exam_Result_MultiPart(models.Model):
    # exam_result would be a new field pointing at the parent Exam_Result
    exam_result = models.ForeignKey(Exam_Result)
    multipart_question = models.ForeignKey(MultiPart_Question)
    student = models.ForeignKey(Student)
    obtained_marks = models.IntegerField()

然后,您可以围绕Exam_Result_MultiPart构建列表视图,例如:

class Exam_Result_MultiPart_Admin(admin.ModelAdmin):
    list_display = (
        'get_exam',
        'get_question_no',
        'get_sub_question_no',
        'get_student',
        'get_marks'
    )

    def get_exam(self, obj):
        return obj.exam_result.exam
    get_exam.short_description = 'Exam'

    def get_question_no(self, obj):
        return obj.exam_result.question_meta.question_no
    get_question_no.short_description = 'Question No.'

    def get_sub_question_no(self, obj):
        return obj.multipart_question.part_number
    get_sub_question_no.short_description = 'Sub Question No.'

    def get_student(self, obj):
        return obj.student
    get_student.short_description = 'Student'

    def get_marks(self, obj):
        return obj.obtained_marks
    get_marks.short_description = 'Marks'