Ejemplo n.º 1
0
def actions(request, app_label=None, action_name=None):
    allactions = filterapp.find_actions('qualitio.%s' % app_label)
    for action_class in allactions:
        action = action_class(data=request.POST)
        if action.name == action_name:
            return action.execute()
    return failed(message="Wrong request")
Ejemplo n.º 2
0
def filter(request, model=None, exclude=('lft', 'rght', 'tree_id', 'level'),
           model_filter_class=None, model_table_class=None, fields_order=(),
           app_menu_items=()):

    if not model and not model_filter_class:
        raise ImproperlyConfigured('"filter" view requires model or model_filter_class to be defined.')

    model = model or model_filter_class._meta.model
    model_table_class = model_table_class or filterapp.generate_model_table(
        model, exclude=exclude, fields_order=fields_order)
    model_filter_class = model_filter_class or filterapp.generate_model_filter(model=model, exclude=exclude)

    generic_filter = model_filter_class(request.GET)
    has_control_params, params = generic_filter.build_from_params()
    if has_control_params:
        return HttpResponseRedirect('%s?%s' % (request.path, params.urlencode()))

    onpage_form = forms.OnPageForm(request.GET)
    onpage = onpage_form.value()

    # 1) We DO NOT use django-pagination 'request.page' feature since
    #    it doesn't work as expected
    # 2) We DO NOT use 'autopaginate' tag since it can raise 404 on wrong page number
    #    and it causes 500.
    page = 1
    try:
        page = int(request.REQUEST['page'])
    except (KeyError, ValueError, TypeError):
        pass

    paginator = Paginator(generic_filter.qs, onpage)
    page_obj = None
    try:
        page_obj = paginator.page(page)
    except (EmptyPage, InvalidPage):
        raise Http404

    # actions
    action_classes = filterapp.find_actions('qualitio.%s' % model._meta.app_label, model=model)
    actions = [ActionClass(None) for ActionClass in action_classes]

    return render_to_response('filter/filter.html', {
            'app_label': model._meta.app_label,
            'app_menu_items': app_menu_items,
            'filter': generic_filter,
            'table': model_table_class(page_obj.object_list, query_dict=request.GET),
            'paginator': paginator,
            'page_obj': page_obj,
            'onpage_form': onpage_form,
            'action_choice_form': filterapp.ActionChoiceForm(actions=actions),
            }, context_instance=RequestContext(request))