我正在设计一个数据库来存储考试问题和学生反对考试的结果。
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管理员中实现这一目标?
如果我在设计数据库模式时使用了正确的方法,请指导我吗?感谢
答案 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'