Django Haystack-两个输入字段

时间:2015-07-11 20:47:23

标签: python django django-haystack whoosh

我是一个大海捞针搜索模型,并且搜索引擎在下面的模型上运行良好:

class Business(models.Model):
    name = models.CharField(max_length=64)
    address = models.CharField(max_length=64, blank=True, null=True)
    district = models.CharField(max_length=32, blank=True, null=True)
    city = models.CharField(max_length=32, blank=True, null=True)
    phone = models.CharField(max_length=32, blank=True, null=True)
    category = models.ManyToManyField(Category)
    picture = models.ImageField(upload_to='business_image', blank=True, null=True)
    slug = models.SlugField(unique=True)
    pub_date = models.DateField(blank=True, auto_now_add=True)
    position = GeopositionField(blank=True, null=True)
    # default="35.80,51.43"

    MY_CHOICES = (('$', '$'),
                  ('$$', '$$'),
                  ('$$$', '$$$'),
                  ('$$$$', '$$$$'),)
    price = models.CharField(max_length=4, choices=MY_CHOICES, blank=True, null=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(unidecode.unidecode(self.name)) + '-' + str(self.id)
        super(Business, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.name

这是我的views.py:

def search1(request, page):
    search_term = request.GET['q']
    print search_term
    form = ItemSearchForm(request.GET)

    results = form.search(request)
    results = SearchQuerySet().filter(name=search_term)
    # results = Business.objects.filter(name__icontains=search_term)


    print results

    n = 10

    # search_res = results['items']
    search_res = results



    temp = []
    for i in search_res:
        temp.append(i)
    paginator = Paginator(temp, n)
    try:
        search_result = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        search_result = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        search_result = paginator.page(paginator.num_pages)

    # Range of all pages
    page_range = paginator.page_range

    # Number of our page
    page = int(page)

    # Range of showing pages
    if page <= 5:
        pages_show = range(1, min(len(page_range), 10) + 1)
    elif page >= len(page_range) - 5:
        pages_show = range(len(page_range) - 9, len(page_range) + 1)
    else:
        pages_show = range(page - 5, page + 5)

    return render(request, 'search/search.html', {
        'search_result': search_result, 'pages_num': page_range, 'page': int(page),
        'term': search_term, 'n': n, 'pages_show': pages_show
    })

这是search_indexes.py:

class BusinessIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(model_attr='name', document=True, use_template=True)

    def get_model(self):
        return Business

这是business_text.txt

{{ object.name }}
{{object.address}}

这是我的模板输入:

<input type="search" id="id_q" name="q" placeholder="business" >

现在我想搜索两个输入字段,一个用于业务名称,另一个用于同时显示业务地址。在我的模板中有这样的东西:

<input type="search" id="id_q" name="q1" placeholder="name" >
<input type="search" id="id_q" name="q2" placeholder="address" >

我不明白在阅读文档时我该怎么做。如果你能帮助我实现后端继续这个,我将不胜感激。

0 个答案:

没有答案