Пример #1
0
def update_object(request, method='json', *args, **kwargs):
    if method == 'json' and request.method == 'POST':
        login_required = kwargs.get('login_required')
        model = kwargs.get('model')
        form_class = kwargs.get('form_class')
        object_id = kwargs.get('object_id')
        slug = kwargs.get('slug')
        slug_field = kwargs.get('slug_field', 'slug')
        if login_required and not request.user.is_authenticated():
            return JsonResponse({'status': 'denied'})
        model, form_class = create_update.get_model_and_form_class(model, form_class)
        obj = create_update.lookup_object(model, object_id, slug, slug_field)
        if request.method == 'POST':
            if issubclass(form_class, ModelFormWithRequest):
                form = form_class(request, request.POST, request.FILES, instance=obj)
            else:
                form = form_class(request.POST, request.FILES, instance=obj)
            if form.is_valid():
                obj = form.save()
                #msg = ugettext("The %(verbose_name)s was updated successfully.") %\
                #                    {"verbose_name": model._meta.verbose_name}
                #messages.success(request, msg, fail_silently=True)
                return JsonResponse({'status': 'ok', 'instance': get_instance_json(obj)})
            else:
                errors = [unicode(striptags("%s: %s" % (k, v))) for k, v in form.errors.iteritems()]
                return JsonResponse({'status': 'failed', 'errors': errors})
    else:
        return create_update.update_object(request, *args, **kwargs)
Пример #2
0
def object_list(request, method, *args, **kwargs):
    if method == 'json':
        queryset = kwargs['queryset']._clone()
        paginate_by = kwargs.get('paginate_by')
        page = kwargs.get('page')
        allow_empty = kwargs.get('allow_empty')
        if paginate_by:
            paginator = Paginator(queryset, paginate_by, allow_empty_first_page=allow_empty)
            if not page:
                page = request.GET.get('page', 1)
            try:
                page_number = int(page)
            except ValueError:
                if page == 'last':
                    page_number = paginator.num_pages
                else:
                    # Page is not 'last', nor can it be converted to an int.
                    raise Http404
            try:
                page_obj = paginator.page(page_number)
            except InvalidPage:
                raise Http404
            context = {
                'instance_list': [get_instance_json(instance) for instance in page_obj.object_list],
                'is_paginated': page_obj.has_other_pages(),
                'results_per_page': paginator.per_page,
                'has_next': page_obj.has_next(),
                'has_previous': page_obj.has_previous(),
                'page': page_obj.number,
                'next': page_obj.next_page_number(),
                'previous': page_obj.previous_page_number(),
                'first_on_page': page_obj.start_index(),
                'last_on_page': page_obj.end_index(),
                'pages': paginator.num_pages,
                'hits': paginator.count,
                'page_range': paginator.page_range,
            }
            return JsonResponse(context)
        else:
            context = {
                'instance_list': [get_instance_json(instance) for instance in queryset],
                'is_paginated': False,
            }
        return JsonResponse(context)
    else:
        return list_detail.object_list(request, *args, **kwargs)
Пример #3
0
def object_detail(request, method, *args, **kwargs):
    if method == 'json':
        queryset = kwargs['queryset']._clone()
        object_id = kwargs.get('object_id')
        slug = kwargs.get('slug')
        slug_field = kwargs.get('slug_field', 'slug')
        
        model = queryset.model
        if object_id:
            queryset = queryset.filter(pk=object_id)
        elif slug and slug_field:
            queryset = queryset.filter(**{slug_field: slug})
        else:
                raise AttributeError("Generic detail view must be called with either an object_id or a slug/slug_field.")
        try:
            obj = queryset.get()
        except ObjectDoesNotExist:
            raise Http404("No %s found matching the query" % (model._meta.verbose_name))
        return JsonResponse({
            'instance': get_instance_json(obj)
        })
    else:
        return list_detail.object_detail(request, *args, **kwargs)