2011-06-09 91 views
0

我不得不承認我用django生鏽了,所以如果問題太簡單,我很抱歉。DJANGO:如何從表格中提取所有元素,但不出現在另一個表格中

我有這樣的以下幾個型號:

class Monograph(models.Model): 
    monid = models.AutoField(primary_key=True) 
    title = models.CharField("Title", max_length=2000) 
    ............. 

class Isbn(models.Model): 
    isbnid = models.AutoField(primary_key=True) 
    monid = models.ForeignKey(Monograph, db_column='monid') 
    isbnnum = models.CharField("ISBN", max_length=20) 
    ............. 

我要提取的是,不會出現在ISBN的表專着的名單。

在SQL我會寫這樣的查詢,如:

SELECT * FROM Monograph WHERE monid NOT IN (SELECT monid FROM Isbn) 

任何想法?

謝謝!

回答

2

一種方法是:

Monograph.objects.exclude(monid__in=Isbn.objects.values_list('monid', flat=True)) 

見文檔爲values_list()__in field lookup

另一種方式是(我覺得這個版本會打DB只有一次):

Monograph.objects.filter(isbns=None) 

你需要外鍵指定related_name='isbns'IsbnMonograph這個工作。 (有關backward relationships的詳細信息,請參閱文檔。)

+0

+1用於組合成單個查詢 – 2011-06-09 19:03:18

+0

這是一個很好的代碼質量指標嗎?我只是懶惰=)我們關了13秒,順便說一句(你是第一個)。 – Tony 2011-06-09 19:06:55

+0

@maz,在您的評論更新之後:不幸的是,我不確定它是否只執行該行的一個查詢。 – Tony 2011-06-09 19:14:26

相關問題