У меня есть сомнения относительно ленивых вычислений в наборах django-запросов.
Это мой запрос django:
Метод1:
tyres_in_car = Car.objects.filter(serial_no__startswith('AB')).values('tyre__type')
В этом запросе я получаю доступ к значениям внешнего ключа, используя в этом случае .values()
(тип шины).
Другой используемый мной подход:
Метод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 выглядит более подходящим, на мой взгляд.