首页 > 解决方案 > django 查询中的惰性求值如何工作?

问题描述

我对 django-querysets 中的惰性评估有疑问。

这是我的 Django 查询:

方法1:

tyres_in_car = Car.objects.filter(serial_no__startswith('AB')).values('tyre__type')

.values()在此查询中,在这种情况下,我使用 (tyre type)访问外键值。

我使用的另一种方法是:

方法2:

第 1 行:tyres = Car.objects.filter(serial_no__startswith('AB'))

第 2 行:all_tyres = tyres.tyre.all()

第 3 行:tyres_in_car = [ ty.type for ty in all_tyres ]

因为,我.values()在这两种方法中都使用了,所以在这两种情况下查询是否只命中数据库一次(因为在方法 2 的情况下是惰性评估),或者在方法 2 的情况下它会命中两次。

从代码可读性的角度来看,我认为方法 2 看起来更合适。

标签: djangodjango-queryset

解决方案


比两者更好的方法是首先查询轮胎。

Tyre.objects.filter(car__serial_no__startswith='AB').values('type')

推荐阅读