簡體   English   中英

相關對象上的Django多維查詢集

[英]Django MultiDimensional Queryset on Related objects

我是Django新手,並創建了測驗應用程序。 我想知道是否有可能只執行一個查詢並為三個相關表獲得一個多級查詢集。

測驗有多個問題,一個問題有多個選擇。

測驗/ models.py:

class Quiz(models.Model):
    title = models.CharField(max_length=200)

class Question(models.Model):
    quiz_id = models.ForeignKey("Quiz", db_column="quiz_id")
    question = models.TextField()

class Choice(models.Model):
    question_id = models.ForeignKey("Question", db_column="question_id")
    text = models.TextField()

我期望的結果是這樣的:

[{
quiz_id:1,
quiz_title: "Quiz Title",
quiz_questions:
[
    {
        question_id:1,
        question_question:"The Question",
        question_choices:[
            {
                choice_id:1,
                choice_text:"The Choice Text"
            },
            {
                choice_id:2,
                choice_text:"The Choice Text"
            }]
    },
    {
        question_id:2,
        question_question:"The Question",
        question_choices:[
            {
                choice_id:1,
                choice_text:"The Choice Text"
            },
            {
                choice_id:2,
                choice_text:"The Choice Text"
            }]
    }
]
}]

是否可以僅使用單個查詢來獲得這種結果? 到目前為止,我可以通過執行以下操作獲得單個Quiz對象並獲取所有相關問題:

quiz_object.questions_set.all()

但是,我無法進入Choices級別,結果存儲在不同的變量中。

您無法在一個查詢中完成所有操作,但是可以使用prefetch_related()來減少查詢數量。 在您的情況下,它可能看起來像這樣,並可能導致總共三個數據庫查詢:

Quiz.objects.filter(stuff=whatever).prefetch_related('question__choice')

文檔中比較此示例:

Restaurant.objects.prefetch_related('pizzas__toppings')

這將預取所有屬於餐廳的比薩餅,以及屬於這些比薩餅的所有澆頭。 這將導致總共3個數據庫查詢-一個針對餐廳,一個針對比薩餅和一個針對澆頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM