【问题标题】:Get questions and overall results from two model classes从两个模型类中获取问题和总体结果
【发布时间】:2011-10-06 12:46:58
【问题描述】:
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),失败(result = = False),已解决(以前是失败,后来改为通过)。

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

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    似乎一些 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 %} 模板标签将问题分组到特定的项目组中,但我认为主要逻辑是上面的行。我希望这对将来的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2013-12-26
      • 1970-01-01
      相关资源
      最近更新 更多