我不得不承认我对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)
有什么想法吗?
谢谢!
答案 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的详细信息,请参阅文档。)