Python 获取带有值的\u对象\u或\u 404
视图。py:Python 获取带有值的\u对象\u或\u 404,python,django,Python,Django,视图。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 =
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_或_404或其他不需要对db做很多请求的东西,是否有其他变体也可以这样做
谢谢 您可以将queryset作为第一个参数传递,而不是模型类。在这里,您可以使用
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})
可以将queryset作为第一个参数而不是模型类传递。在这里,您可以使用
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})
如果你只想要一件物品,你不应该使用
Car.objects.get
你的问题不清楚。是否要在单个查询中按车辆id和活动字段进行筛选?@TanveerAlam我希望使用模板中的模型字段,并将对数据库的请求数量降至最低。如果我使用get_object_或_404,我会有很多请求如果你只想要一件你不应该使用的物品,那么你的问题不清楚。是否要在单个查询中按车辆id和活动字段进行筛选?@TanveerAlam我希望使用模板中的模型字段,并将对数据库的请求数量降至最低。如果我使用get_object_或_404,我会有很多请求