import json from django.views.generic import FormView from django.views.decorators.csrf import csrf_exempt from django.shortcuts import render_to_response, get_object_or_404, HttpResponse, Http404 from django.http import HttpResponseRedirect from django.conf import settings from photologue.forms import PhotoForm class AdminView(FormView): obj = None def set_obj(self): url = self.kwargs.get('url') # if url: try: obj = self.model.objects.get(url=url) self.obj = obj except: raise Http404 pass # obj = get_object_or_404(self.model, url=url) return obj slug = self.kwargs.get('slug') if slug: obj = get_object_or_404(self.model, slug=slug) self.obj = obj return obj id = self.kwargs.get('id') if id: obj = get_object_or_404(self.model, id=id) self.obj = obj return obj self.obj = None return None def get_context_data(self, **kwargs): context = super(AdminView, self).get_context_data(**kwargs) self.set_obj() context['object'] = self.obj context['languages'] = settings.LANGUAGES return context def form_valid(self, form): self.set_obj() form.save(obj=self.obj) return HttpResponseRedirect(self.success_url) # example get_form """ def get_form(self, form_class): if self.request.POST: return super(AdminView, self).get_form(form_class) self.set_obj() if self.obj: obj = self.obj data = {} data['theme'] = [item.id for item in article.theme.all()] data['exposition'] = article.exposition data['conference'] = article.conference a = ','.join(['%s:%s'%(item.id, item.name) for item in article.tag.all()]) data['tag'] = ','.join(['%s:%s'%(item.id, item.name) for item in article.tag.all()]) for code, name in settings.LANGUAGES: obj = Article._meta.translations_model.objects.get(language_code = code,master__id=getattr(article, 'id')) #access to translated fields data['main_title_%s' % code] = obj.main_title data['preview_%s' % code] = obj.preview data['description_%s' % code] = obj.description data['title_%s' % code] = obj.title data['keywords_%s' % code] = obj.keywords data['descriptions_%s' % code] = obj.descriptions form = form_class(data) #form.fields['tag'].widget.attrs['data-init-text'] = [item.name for item in article.tag.all()] return form_class(data) else: return form_class() """ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def paginate_results(qs, page=None): paginator = Paginator(qs, settings.ADMIN_PAGINATION) try: result = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. result = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. result = paginator.page(paginator.num_pages) return result def stat_paginate_results(qs, page=None): result = paginate_results(qs, page=page) result.object_list = result.object_list.prefetch_related('objectstats_set') return result from hvad.models import TranslatableModel class AdminListView(FormView): paginate_func = staticmethod(paginate_results) def get_form(self, form_class): if self.request.GET: return form_class(self.request.GET) else: return form_class(**self.get_form_kwargs()) def get(self, request, *args, **kwargs): if request.GET: form_class = self.get_form_class() form = self.get_form(form_class) if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) else: return super(AdminListView, self).get(request, *args, **kwargs) def form_valid(self, form): """ filtering queryset and return paginated results """ qs = form.filter() result = self.paginate_func(qs, page=self.request.GET.get('page')) context = self.get_context_data(form=form) context.update({'object_list': result}) return self.render_to_response(context) def get_queryset(self): if issubclass(self.model, TranslatableModel): return self.model.objects.language().all().order_by('name') else: return self.model.objects.all().order_by('-modified') def get_context_data(self, **kwargs): context = super(AdminListView, self).get_context_data(**kwargs) qs = self.get_queryset() result = self.paginate_func(qs, page=self.request.GET.get('page')) context['object_list'] = result return context # @csrf_exempt # def upload_photo(request, id, Model): # """ # uploading photo to some instance of Model # instance must have upload_photo method, which download photo # # """ # obj = get_object_or_404(Model, pk=id) # if request.method == 'POST': # response = {'success': False} # form = PhotoForm(request.POST, request.FILES) # if form.is_valid(): # photo = form.save() # obj.upload_photo(photo) # response['success'] = True # else: # response.update({'errors': form.errors}) # # return HttpResponse(json.dumps(response), content_type='application/json') # else: # return HttpResponse('not post')