diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 64 | 
1 files changed, 54 insertions, 10 deletions
| diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 2d0976be1..01811ed2d 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -38,6 +38,7 @@ from django.contrib.auth.decorators import login_required  from django.core.exceptions import ObjectDoesNotExist  from django.core.urlresolvers import reverse, NoReverseMatch  from django.db.models import Q, ImageField +from django.db.models.fields import FieldDoesNotExist  from django.forms.models import modelformset_factory  from django.http import HttpResponse, Http404, HttpResponseRedirect, \      HttpResponseBadRequest @@ -148,12 +149,18 @@ organization_deletion_wizard = wizards.OrganizationDeletionWizard.as_view(      url_name='organization_deletion',)  account_management_wizard = wizards.AccountWizard.as_view( -    [('selec-account_management', forms.PersonFormSelection), +    [('selec-account_management', forms.PersonUserFormSelection),       ('account-account_management', forms.AccountForm),       ('final-account_management', forms.FinalAccountForm)],      label=_(u"Account management"),      url_name='account_management',) +account_deletion_wizard = wizards.IshtarUserDeletionWizard.as_view( +    [('selec-account_deletion', forms.AccountFormSelection), +     ('final-account_deletion', FinalDeleteForm)], +    label=_(u"Account deletion"), +    url_name='account_deletion',) +  def get_autocomplete_generic(model, extra={'available': True}):      def func(request): @@ -447,14 +454,19 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                      if k in reversed_bool_fields:                          dct[k] = not dct[k]                      # check also for empty value with image field -                    c_field = model._meta.get_field(k.split('__')[0]) -                    if k.endswith('__isnull') and \ -                       isinstance(c_field, ImageField): -                        if dct[k]: -                            or_reqs.append( -                                (k, {k.split('__')[0] + '__exact': ''})) -                        else: -                            dct[k.split('__')[0] + '__regex'] = '.{1}.*' +                    field_name = k.split('__')[0] +                    # TODO: can be improved in later evrsion of Django +                    try: +                        c_field = model._meta.get_field(field_name) +                        if k.endswith('__isnull') and \ +                           isinstance(c_field, ImageField): +                            if dct[k]: +                                or_reqs.append( +                                    (k, {k.split('__')[0] + '__exact': ''})) +                            else: +                                dct[k.split('__')[0] + '__regex'] = '.{1}.*' +                    except FieldDoesNotExist: +                        pass          for k in dated_fields:              if k in dct:                  if not dct[k]: @@ -527,6 +539,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],              query = query & and_req          items = model.objects.filter(query).distinct() +        # print(items.query)          q = request_items.get('sidx')          # table cols @@ -614,7 +627,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                  my_vals = []                  for k in keys:                      vals = [item] +                    # foreign key may be splited by "." or "__" +                    splitted_k = []                      for ky in k.split('.'): +                        if '__' in ky: +                            splitted_k += ky.split('__') +                        else: +                            splitted_k.append(ky) +                    for ky in splitted_k:                          new_vals = []                          for val in vals:                              if hasattr(val, 'all'):  # manage related objects @@ -685,7 +705,16 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                          table_col = table_cols[idx]                          if type(table_col) not in (list, tuple):                              table_col = [table_col] -                        k = "__".join([tc.split('.')[-1] for tc in table_col]) +                        tab_cols = [] +                        # foreign key may be splited by "." or "__" +                        for tc in table_col: +                            if '.' in tc: +                                tab_cols.append(tc.split('.')[-1]) +                            elif '__' in tc: +                                tab_cols.append(tc.split('__')[-1]) +                            else: +                                tab_cols.append(tc) +                        k = "__".join(tab_cols)                          res[k] = value                  rows.append(res)              data = json.dumps({ @@ -941,11 +970,26 @@ show_person = show_item(models.Person, 'person')  get_person = get_item(      models.Person,      'get_person', 'person', +    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',          'person_types': 'person_types__pk__in', +        'ishtaruser__isnull': 'ishtaruser__isnull' +    }) + +get_ishtaruser = get_item( +    models.IshtarUser, +    'get_ishtaruser', 'ishtaruser', +    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',      }) | 
