forms.py 2.05 KB
# -*- coding: utf-8 -*-

import unicodedata

from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from haystack.forms import SearchForm

from accounts.models import User
from super_archives.models import Message


class ColabSearchForm(SearchForm):
    q = forms.CharField(label=_('Search'), required=False)
    order = forms.CharField(widget=forms.HiddenInput(), required=False)
    type = forms.CharField(required=False, label=_(u'Type'))

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if self.cleaned_data.get('q'):
            q = unicodedata.normalize(
                'NFKD', unicode(self.cleaned_data.get('q'))
            ).encode('ascii', 'ignore')
            sqs = self.searchqueryset.auto_query(q)
        else:
            sqs = self.searchqueryset.all()

        if self.cleaned_data['type']:
            "It will consider other types with a whitespace"
            types = self.cleaned_data['type']
            sqs = sqs.filter(type__in=types.split())


        if self.cleaned_data['order']:
            for option, dict_order in settings.ORDERING_DATA.items():
                if self.cleaned_data['order'] == option:
                    if dict_order['fields']:
                        sqs = sqs.order_by(*dict_order['fields'])
           # if self.cleaned_data['type'] == 'user':
           #     sqs = self.searchqueryset.models(User)
           # elif self.cleaned_data['type'] in ['message', 'thread']:
           #     sqs = self.searchqueryset.models(Message)
           # elif self.cleaned_data['type'] == 'wiki':
           #     sqs = self.searchqueryset.models(Wiki)
           # elif self.cleaned_data['type'] == 'changeset':
           #     sqs = self.searchqueryset.models(Changeset)
           # elif self.cleaned_data['type'] == 'ticket':
           #     sqs = self.searchqueryset.models(Ticket)
           # else:
           #     sqs = self.searchqueryset.all()


        if self.load_all:
            sqs = sqs.load_all()

        return sqs