У меня есть веб-приложение для поиска автомобилей. На целевой странице я могу ввести ключевое слово и выполнить поиск или go по ссылке, которая отображает все данные с фильтрами. Поэтому мои URL,
url(r'^cars/$', search, name='search'), ==> does an elastic search
url(r'^select/', select, name='select'),==> has links to filter results and pass query set
Когда я ввожу ключевое слово (скажем, Audi) и выполняю поиск, URL становится localhost: 8000 / cars /? Search = Audi, и если я нажимаю на ссылку, он просто говорит localhost: 8000 / select /
Оба эти представления (поиск и выбор) отображают один и тот же шаблон. Теперь я хочу отфильтровать результаты или добавить дополнительные критерии. Какой должен быть правильный подход для этого? Один из веб-сайтов, где меня вдохновили на этот проект, просто перенаправляет на / cars? Search = Audi и нажимает на любую ссылку, чтобы отфильтровать перенаправления на / cars / Audi / BMW / Sedan. Возможно ли это в Django?
Вот код выбора вида. Я все еще учусь Django и python, поэтому, пожалуйста, потерпите меня.
def select(request):
q1 = request.GET.get('brand')
q2 = request.GET.get('model')
q3 = request.GET.get('bodyStyle')
q4 = request.GET.get('budget[]')
q5 = request.GET.get('transmission')
page = request.GET.get('page', 1)
print(q1)
s1 = request.POST.get('sortBy')
budarray = request.GET.getlist('budget')
brandarray = request.GET.getlist('brand')
modelarray = request.GET.getlist('model')
bodyarray = request.GET.getlist('bodyStyle')
transmissionarray = request.GET.getlist('transmission')
cars = product_details.objects.all()
posturl=""
if len(brandarray)>0:
brandarray=list(dict.fromkeys(brandarray))
cars = cars.filter(brand_name__in=brandarray)
if len(modelarray)>0:
cars = cars.filter(model_name__in=modelarray)
if len(bodyarray)>0:
cars = cars.filter(bodystyle__in=bodyarray)
if len(transmissionarray)>0:
cars = cars.filter(transmission__in=transmissionarray)
minp=0
maxp=0
denom=""
arraybud =[]
if len(budarray)>0:
for items in budarray:
budgetval = GetBudget(items)
minp=int(budgetval[0])
maxp=int(budgetval[1])
denom=budgetval[2]
arraybud.append(minp)
arraybud.append(maxp)
minprice=0
maxprice=0
if len(budarray)>0:
minprice=min(arraybud)
maxprice=max(arraybud)
if minp>100:
cars=cars.filter(min_price__gt=minprice).filter(denomination='Crore')
denom="Crores"
else:
denom="Lakhs"
cars=cars.filter(min_price__gt=minprice,min_price__lt=maxprice).filter(denomination=denom)
sort = GetOrderBy(s1)
if sort =="nothing":
cars = cars.order_by('model_name','min_price')
else:
cars = cars.order_by('model_name',sort)
cars = cars.distinct('model_name')
totalResult = cars.count()
if totalResult >= 50:
paginator = Paginator(cars, 25)
else:
paginator = Paginator(cars, 10)
try:
cars = paginator.page(page)
except PageNotAnInteger:
cars = paginator.page(1)
except EmptyPage:
cars = paginator.page(paginator.num_pages)
print(request.get_full_path)
_brands = products.objects.all()
_models= product_models.objects.all()
_bodystyles = product_bodystyle.objects.all()
posturl = "Y"
hyundaicars = product_details.objects.filter(brand_name='Hyundai').distinct('model_name')
tatamotors = product_details.objects.filter(brand_name='Tata').distinct('model_name')
maruticars = product_details.objects.filter(brand_name='Maruti Suzuki').distinct('model_name')
mahindracars = product_details.objects.filter(brand_name='Mahindra').distinct('model_name')
hondacars = product_details.objects.filter(brand_name='Honda').distinct('model_name')
for (i, item) in enumerate(budarray):
if item == "1":
budarray[i] = "1 - 5 Lakhs"
if item == "2":
budarray[i] = "5 - 10 Lakhs"
if item == "3":
budarray[i] = "10 - 15 Lakhs"
if item == "4":
budarray[i] = "15 - 20 Lakhs"
if item == "5":
budarray[i] = "20 - 25 Lakhs"
if item == "6":
budarray[i] = "25 - 50 Lakhs"
if item == "7":
budarray[i] = "50 - 99 Lakhs"
if item == "8":
budarray[i] = "Above 1 Crore"
return render(request, 'search/search_results.html', carsdetails)