views.py:
def car(request, car_id):
car = get_object_or_404(Car, pk=car_id, active=1)
return render(request, 'car.html', {'car': car,}
)
car.html :中的
...
{{ car.mark }}, {{ car.options.year }}, etc.
...
所以,我对我的数据库有很多请求。在另一个视图中,我使用
all_cars = Cars.objects.all().filter(active=1).values(...)
在这个变种中,我只有2个请求db。
是的,我知道,我可以在汽车的视野中使用:
car = Car.objects.filter(id=car_id, active=1).values(...)[0]
是否有其他变体对get_object_or_404做了同样的事情,没有对db做很多请求?
谢谢!
答案 0 :(得分:3)
您可以将查询集作为第一个参数传递,而不是模型类。在这里,您可以使用select_related
(和prefetch_related
,但似乎您需要第一个)来减少数据库查询:
def car(request, car_id):
cars = Car.objects.select_related('options')
car = get_object_or_404(cars, pk=car_id, active=1)
return render(request, 'car.html', {'car': car})