2016-01-31 3 views
0

Я делаю поисковый рафинер для своего сайта, а im в настоящее время делает запрос, который возвращает соответствующие списки на основе формы, которую пользователь заполнил. Проблема в том, что формы поля являются необязательными, и я не могу понять, как изменить свое изменение в зависимости от того, какие поля введены. Может ли кто-нибудь предложить эффективный способ сделать это? Ура!Как изменить поиск в Django Query на основе ввода пользователем

View -

def browse(request): 

    business_industry = request.GET.get('business_industry', '') 
    business_address_region = request.GET.get('business_address_region', '') 
    employment_type = request.GET.get('employment_type', '') 
    pay_rate = request.GET.get('pay_rate', '') 
    keywords = request.GET.get('keywords', '') 

    form = JobSearchForm() 

    job_listings = JobListing.objects.exclude(active_listing=False) 

    if business_industry == '' and business_address_region == '' and keywords == '' and pay_rate == '' and employment_type == '': 
     print("Nothing has been entered.") 
    else: 
     print(job_listings) 
     print("Something has been entered") 
     job_listings = JobListing.objects.filter(
           Q(job_description__icontains=keywords) & 
           Q(business_industry=business_industry) & 
           Q(business_address_region__icontains=business_address_region) 
           ).distinct() 

    context_dict = { 
     'joblistings': job_listings, 
     'form': form 
    } 

    return render(request, 'browse.html', context_dict) 

ответ

1
def browse(request): 

    business_industry = request.GET.get('business_industry', '') 
    business_address_region = request.GET.get('business_address_region', '') 
    employment_type = request.GET.get('employment_type', '') 
    pay_rate = request.GET.get('pay_rate', '') 
    keywords = request.GET.get('keywords', '') 

    form = JobSearchForm() 

    filters = Q(active_listing=True) 

    if business_industry: 
     filters &= Q(business_industry=business_industry) 
    if business_address_region: 
     filters &= Q(business_address_region__icontains=business_address_region) 
    if keywords: 
     filters &= Q(job_description__icontains=keywords) 

    job_listings = JobListing.objects.filter(filters).distinct() 

    context_dict = { 
     'joblistings': job_listings, 
     'form': form 
    } 

    return render(request, 'browse.html', context_dict) 
1

Я бы с помощью простого решения

job_listings = [] 
if business_industry: job_listings += JobListing.objects.filter(business_industry=business_industry).list() 
if keywords: job_listings += JobListing.objects.filter(job_description__icontains=keywords).list() 
if business_address_region : job_listings += JobListing.objects.filter(business_address_region__icontains=business_address_region).list() 
job_listing = list(set(job_listing)) 
Смежные вопросы