diff options
| -rw-r--r-- | ishtar_common/forms_common.py | 12 | ||||
| -rw-r--r-- | ishtar_common/models.py | 94 | 
2 files changed, 86 insertions, 20 deletions
| diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index ec6f7bc96..e6f37a794 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -337,7 +337,9 @@ class OrganizationForm(ManageOldType, NewItemForm):          return new_item -class OrganizationSelect(TableSelect): +class OrganizationSelect(TableSelect):  # OK +    _model = models.Organization +      search_vector = forms.CharField(          label=_(u"Full text search"), widget=widgets.SearchWidget(              'ishtar-common', 'organization' @@ -454,7 +456,9 @@ class BaseOrganizationForm(forms.ModelForm):                    'town', 'postal_code'] -class PersonSelect(TableSelect): +class PersonSelect(TableSelect):  # OK +    _model = models.Person +      search_vector = forms.CharField(          label=_(u"Full text search"), widget=widgets.SearchWidget(              'ishtar-common', 'person' @@ -585,7 +589,9 @@ class PersonUserFormSelection(PersonFormSelection):          validators=[models.valid_id(models.Person)]) -class IshtarUserSelect(TableSelect): +class IshtarUserSelect(TableSelect):  # OK +    _model = models.IshtarUser +      search_vector = forms.CharField(          label=_(u"Full text search"), widget=widgets.SearchWidget(              'ishtar-common', 'ishtaruser' diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c43dca279..e16c4a360 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -52,7 +52,7 @@ from django.db.utils import DatabaseError  from django.template.defaultfilters import slugify  from django.utils.functional import lazy  from django.utils.safestring import SafeUnicode, mark_safe -from django.utils.translation import ugettext_lazy as _, ugettext +from django.utils.translation import ugettext_lazy as _, ugettext, pgettext_lazy  from secretary import Renderer as SecretaryRenderer  from simple_history.models import HistoricalRecords as BaseHistoricalRecords  from unidecode import unidecode @@ -64,7 +64,7 @@ from ishtar_common.models_imports import ImporterModel, ImporterType, \      Import, TargetKeyGroup  from ishtar_common.utils import get_cache, disable_for_loaddata, create_slug, \      get_all_field_names, merge_tsvectors, cached_label_changed, \ -    generate_relation_graph +    generate_relation_graph, TXT_SEARCH_COMMENT  __all__ = [      'ImporterModel', 'ImporterType', 'ImporterDefault', 'ImporterDefaultValues', @@ -2513,12 +2513,23 @@ class Organization(Address, Merge, OwnPerms, ValueGetter):      SHOW_URL = 'show-organization'      # search parameters -    EXTRA_REQUEST_KEYS = { -        'name': 'name__icontains', -        'organization_type': 'organization_type__pk__in', -    } +    EXTRA_REQUEST_KEYS = {}      BASE_SEARCH_VECTORS = ['name', 'town'] +    # alternative names of fields for searches +    ALT_NAMES = { +        'name': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"name"), +            'name__icontains' +        ), +        'organization_type': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"type"), +            'organization_type__label__iexact' +        ), +    } +    for v in ALT_NAMES.values(): +        EXTRA_REQUEST_KEYS[v[0]] = v[1] +      # fields      name = models.CharField(_(u"Name"), max_length=500)      organization_type = models.ForeignKey(OrganizationType, @@ -2626,17 +2637,43 @@ class Person(Address, Merge, OwnPerms, ValueGetter):      # search parameters      REVERSED_BOOL_FIELDS = ['ishtaruser__isnull']      EXTRA_REQUEST_KEYS = { -        'name': ['name__icontains', 'raw_name__icontains'], -        'surname': ['surname__icontains', 'raw_name__icontains'], -        'attached_to': 'attached_to__pk',          'attached_to__name': 'attached_to__name', -        'person_types': 'person_types__pk__in',          'ishtaruser__isnull': 'ishtaruser__isnull',      }      COL_LABELS = {          'attached_to__name': _(u"Organization")      } +    # alternative names of fields for searches +    ALT_NAMES = { +        'name': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"name"), +            'name__icontains' +        ), +        'surname': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"surname"), +            'surname__icontains' +        ), +        'email': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"email"), +            'email__icontains' +        ), +        'person_types': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"type"), +            'person_types__label__iexact' +        ), +        'attached_to': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"organization"), +            'attached_to__cached_label__iexact' +        ), +        'ishtaruser__isnull': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"has-account"), +            'ishtaruser__isnull' +        ), +    } +    for v in ALT_NAMES.values(): +        EXTRA_REQUEST_KEYS[v[0]] = v[1] +      # fields      old_title = models.CharField(_(u"Title"), max_length=100, choices=TYPE,                                   blank=True, null=True) @@ -2971,16 +3008,39 @@ class IshtarUser(FullSearch):      # search parameters      EXTRA_REQUEST_KEYS = { -        'username': ['username__icontains'], -        'name': ['person__name__icontains', 'person__raw_name__icontains'], -        'surname': ['person__surname__icontains', -                    'person__raw_name__icontains'], -        'email': ['person__email'], -        'attached_to': 'person__attached_to__pk', -        'person_types': 'person__person_types__pk__in',          'person__person_types_list': 'person__person_types__name'      } +    # alternative names of fields for searches +    ALT_NAMES = { +        'username': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"username"), +            'user_ptr__username__icontains' +        ), +        'name': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"name"), +            'person__name__icontains' +        ), +        'surname': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"surname"), +            'person__surname__icontains' +        ), +        'email': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"email"), +            'person__email__icontains' +        ), +        'person_types': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"type"), +            'person__person_types__label__iexact' +        ), +        'attached_to': ( +            pgettext_lazy(TXT_SEARCH_COMMENT, u"organization"), +            'person__attached_to__cached_label__iexact' +        ), +    } +    for v in ALT_NAMES.values(): +        EXTRA_REQUEST_KEYS[v[0]] = v[1] +      # fields      user_ptr = models.OneToOneField(User, primary_key=True,                                      related_name='ishtaruser') | 
