diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-16 16:57:14 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-16 16:58:35 +0200 |
commit | 9b7699ff154f1736c9ed0a93d061812c8296a86f (patch) | |
tree | 2ddde4a8b28819f78b4bdd3c6a2c6f5e1f0434d9 /ishtar_common/views.py | |
parent | 6f4a3e5256652d0e8205a2000252dea964e7ad4a (diff) | |
download | Ishtar-9b7699ff154f1736c9ed0a93d061812c8296a86f.tar.bz2 Ishtar-9b7699ff154f1736c9ed0a93d061812c8296a86f.zip |
Account management: fix edit - can delete an account (refs #2977)
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', }) |