2016-04-23 97 views
0

我仍在學習Django。任何熟悉Django 1.8或更高版本的人都可以幫助我解決這個問題。我在參加這5臺的問題,我想執行一個查詢,相當於這個SQL查詢:在Django 1.9中加入多個表格

SELECT * 
from modelname1 a 
join modelname2 b on a.id = b.id 
join modelname3 c on c.id = b.id 
join modelname4 d on d.id = c.id 
join modelname5 on e.id = d.id; 

我有這些模型:

class modelname1(models.Model): 
    modelname1_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 

class modelname2(models.Model): 
    modelname2_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname1) 

class modelname3(models.Model): 
    modelname3_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname2) 

class modelname4(models.Model): 
    modelname4_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname3) 

class modelname5(models.Model): 
    modelname5_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname4) 

我不知道怎麼翻譯我想在Django上面的查詢, 我可以使查詢得到相同的答案,但我需要將它分成多個查詢之前得到相同的答案。 非常感謝您的幫助!

+1

我會建議你改變你的想法。您可能不需要「翻譯」您的查詢,只需使用ORM即可獲取您喜歡的任何字段的值。 – Wtower

+0

你最終在你的輸出中尋找哪些字段? – AKS

+0

@AKS - 我想在一個查詢中加入所有表格並且有條件。 –

回答

0

在Django中你可以簡單的查詢是這樣的:

>>>from app.models import modelname1 
>>> q = modelname1.objects.get(id = 1) 
>>> m2 = q.modelname2 # In django 1.8 or later 
>>> m3 = m2.modelname3 
>>> m4 = m3.modelname4 
... And so on! 

但我不提供,因爲很多數據庫擊球的這種方式。如果你想優化你的數據庫訪問可以閱讀這篇文章: https://docs.djangoproject.com/en/1.9/topics/db/optimization/

+0

這就是我對我的問題得到同樣答案的方式。我必須多次訪問數據庫才能得到答案,我只需要通過點擊一次數據庫來加入五個表,然後在其上有一個條件。感謝您的答覆! –

+0

歡迎您@Abz Rockers,您可以通過點擊打勾來改變這個問題的狀態,或者如果您願意,可以給我一個答案+。 –