2011-10-06 30 views
0
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 ==結果),失敗(結果==假),解決(以前是失敗,但後來改爲通過)。從兩個模型類獲取問題和總體結果

我想我的主要問題是,每輛車可以有相同的問題回答了幾次,所以我需要一種方法來在查詢中考慮這一點。我真的不知道如何讓這個跑步,所以我希望有人有一個想法。謝謝。

回答

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 %}模板標籤將問題分組到他們特定的項目組中,但我認爲的主要邏輯是上面的一行。我希望這將有助於未來的人。