从两个模型类中获取问题和总体结果

时间:2011-10-06 12:46:59

标签: django django-queryset

class InspectionQuestion(models.Model):
    item = models.ForeignKey(InspectionItem)
    question = models.CharField(max_length=200)
    question_pass = models.BooleanField()    

class InspectionResult(models.Model):
    question = models.ForeignKey(InspectionQuestion)
    vehicle = models.ForeignKey(Vehicle)
    result = models.BooleanField()

从上面的课程中,我希望能够获得每个车辆回答的问题列表,然后针对每个问题,显示结果是否一直是通过(question_pass ==结果),失败( result == False),已解决(曾经是失败,但后来被改为传递)。

我猜的主要问题是每辆车可以多次回答相同的问题,所以我需要一种方法来在查询中考虑这一点。我真的不知道如何让这个运行起来,所以我希望有人有个主意。感谢。

1 个答案:

答案 0 :(得分:0)

似乎有些SQL已被证明是方便的......如果有人知道如何在Django ORM中做到这一点,我会很乐意尝试他们的想法。这是我到目前为止所做的:

我遇到了这个handy link,展示了如何从Django运行稍微复杂的SQL。所以使用它,我使用这个查询来提出每个问题和答案:

question_list = query_to_dict("""
  SELECT question_id, question, item, array_agg(pass_fail) AS results
  FROM "vehicles_inspectionresult"
  INNER JOIN "vehicles_inspectionquestion" ON 
  ("vehicles_inspectionresult"."question_id" = "vehicles_inspectionquestion"."id")
  INNER JOIN "vehicles_inspectionitem" ON 
  ("vehicles_inspectionquestion"."item_id" = "vehicles_inspectionitem"."id")
  WHERE "vehicles_inspectionresult"."vehicle_id" = %s
  GROUP BY item, question_id, question
  ORDER BY item;
""", vehicle.id)

pass_fail变量是对InspectionResult类的补充...它是通过将问题的答案与保存时发布的内容进行比较来判断答案是否正确。

其余的主要是使用Django的{% regroup %}模板标签将问题分组到特定项目组的模板代码,但我视图中的主要逻辑是上面的行。我希望这有助于将来。