DJANGO:如何从表中提取未出现在另一个表中的所有元素

时间:2011-06-09 18:51:38

标签: django django-models

我不得不承认我对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)

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分: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'Isbn的外键上指定Monograph才能生效。 (有关backward relationships的详细信息,请参阅文档。)