diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index c27aae74b..0f234c0a1 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -40,7 +40,7 @@ from django.contrib.auth.decorators import login_required from django.core import serializers from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse, NoReverseMatch -from django.db.models import Q, ImageField +from django.db.models import Q, F, ImageField from django.http import HttpResponse, Http404 from django.shortcuts import render_to_response, redirect from django.template import RequestContext, loader @@ -795,6 +795,50 @@ def dashboard_main_detail(request, item_name): return render_to_response('ishtar/dashboards/dashboard_main_detail.html', dct, context_instance=RequestContext(request)) +from django.forms.models import model_to_dict + +from django.forms.models import modelformset_factory + +ITEM_PER_PAGE = 20 +def merge_action(model, form, key): + def merge(request, page=1): + current_url = key + '_merge' + if not page: + page = 1 + page = int(page) + FormSet = modelformset_factory(model.merge_candidate.through, + form=form, formset=forms.MergeFormSet ,extra=0) + q = model.merge_candidate.through.objects + context = {'current_url':current_url, + 'current_page':page, + 'max_page':q.count()/ITEM_PER_PAGE} + if page < context["max_page"]: + context['next_page'] = page + 1 + if page > 1: + context['previous_page'] = page - 1 + + item_nb = page*ITEM_PER_PAGE + item_nb_1 = item_nb + ITEM_PER_PAGE + from_key = 'from_' + key + to_key = 'to_' + key + queryset = q.all().order_by(from_key + '__name')[item_nb:item_nb_1] + FormSet.from_key = from_key + FormSet.to_key = to_key + if request.method == 'POST': + context['formset'] = FormSet(request.POST, queryset=queryset) + if context['formset'].is_valid(): + context['formset'].merge() + return redirect(reverse(current_url, kwargs={'page':page})) + else: + context['formset'] = FormSet(queryset=queryset) + return render_to_response('ishtar/merge_'+key+'.html', context, + context_instance=RequestContext(request)) + + return merge + +person_merge = merge_action(models.Person, forms.MergePersonForm, 'person') +organization_merge = merge_action(models.Organization, forms.MergeOrganizationForm, + 'organization') class LoginRequiredMixin(object): @method_decorator(login_required) |