2014-07-21 86 views
0

我想弄清楚如何將下面的SQL語句轉換爲普通的Django查詢。創建與不具有相同名稱的字段的Django加入

SELECT * FROM table w JOIN 
(SELECT * FROM student_class WHERE class_id=8) AS s 
ON s.student_id=w.id; 

我只想看看student_class匹配特定值(這裏class_id=8)的行,然後用w.id匹配s.student_id加入這些結果。

看來我應該可以使用.filter()和一些雙下劃線來做些事情。 filter(student_class__class_id=8)但我無法得到這個工作。

+0

你實際上並沒有使用[預留工作](http://www.postgresql.org/docs/current/interactive/sql-keywords-appendix.html)'table'作爲表名,是嗎?請用正確的名字編輯你的問題。你想返回什麼?所有列?或者只是'table'的列? –

+0

如果您發佈相關型號,它將有助於我們。 –

回答

0

應該幫助理清您的扭曲聲明:

SELECT * 
FROM table w 
JOIN student_class s ON s.student_id = w.id 
WHERE s.class_id = 8; 

更換table有一個合適的名字。
如果表已定義的關係,這Django的語法應該工作:跨越關係

Django還提供了一個功能強大,直觀的方式來「跟隨」的關係

Table.objects.filter(student_class__class_id=8) 

Per Django documentation:

查找在查找中,自動爲您處理SQL JOIN,在 後面。要跨越關係,只需使用跨模型的相關 字段的字段名稱,用雙下劃線分隔,直到獲得 到您想要的字段。

大膽重視我的。

+0

好吧,我看到這給了我主查詢相同的結果。但是我仍然無法將其轉化爲django請求。 我認爲這意味着它會像'Student_Class.objects.filter( akajb

+0

@akajb:添加了Django語法。 –

+0

@ErwinBrandstetter:關於SQL查詢,所發佈的和你建議的基本相同。我認爲SO建議可能會更快,因爲您限制了要加入的student_class的行數。我對麼?你的Django查詢是完美的 –

相關問題