我想在django实现搜索。你知道吗
我的观点如下:
search_term = request.GET['search_term']
customers = Customer.objects.filter(
Q(chassis__icontains=search_term) | Q(registration__icontains=search_term) |
Q(email__icontains=search_term) | Q(firstname__icontains=search_term) |
Q(lastname__icontains=search_term))
calculations_data = []
if customers:
for customer in customers:
try:
calculation = Calculations.objects.get(customer=customer, user=request.user)
calculations_data.append({
'calculation': calculation,
'price': price_incl_vat(calculation.purchase_price),
'customer_fullname': '{} {} '.format(customer.firstname, customer.lastname),
'car_chassis': customer.chassis,
'car_registration': customer.registration,
})
except Calculations.DoesNotExist:
pass
context = {'search_term': search_term, 'total_result': len(calculations_data), 'calculation_data': calculations_data}
return render(request, 'master/search.html', context)
我有两个模型,calculations
和customer
。内部计算我有客户作为外键,但它可以是空的。因此,每个计算不需要有一个客户。你知道吗
在我的例子中,如果我有search term
,结果是好的,但是如果没有搜索项,那么我只得到有客户的计算。你知道吗
但我需要的是,如果没有搜索项,我想得到所有的计算结果。你知道吗
有没有更好的方法来编写查询?你知道吗
谢谢。你知道吗
既然结果取决于
search_term
的可用性,为什么不在search_term
上使用if-else
。你知道吗当
search_term
不是None
时,您可以进一步简化代码,方法是将Q
对象直接放入Calculations.objects.filter()
本身(而不是获取相关客户,然后找到相关计算)。在Django中,您可以查询Q
对象中外键的属性。您首先获取客户,然后使用这些结果进行计算。这将增加对数据库的查询数量。你知道吗您可以执行以下操作:
相关链接:}
1Lookups that span relationships
2^{
试试这个:
相关问题 更多 >
编程相关推荐