您好我想知道如何在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列表。此外,对于大型数据集来说,这将非常慢。
答案 0 :(得分:0)
您可以尝试这样的事情:
all_persons = Person.objects.all().values_list('car__id', flat=True)
auto_without_pers = Automobile.objects.exclude(id__in=all_persons)
因为查询集是延迟加载的,所以这将导致单个sql查询。