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)  | 
