如何在Django中查询未被其他模型引用的Model

时间:2015-02-26 05:15:23

标签: python django django-models

您好我想知道如何在Django&#ORM中进行此查询。考虑以下模型:

class Person(model.Models):
    name = models.CharField(max_length=16)
    car = models.ManyToManyField("Automobile")

class Automobile(model.Models):
    model = models.CharField(max_length=16)

我想找到一个未被Person引用的 Automobile 。如何在Django中做到这一点? 我想过这样做:

am_no_person = []
for am in Automobile.objects.all():
    if not am.person_set.count():
        am_no_person.append(am)

但是这看起来效率低下并且不会返回QuerySet对象 一个python列表。此外,对于大型数据集来说,这将非常慢。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

all_persons = Person.objects.all().values_list('car__id', flat=True)
auto_without_pers = Automobile.objects.exclude(id__in=all_persons)

因为查询集是延迟加载的,所以这将导致单个sql查询。