from django.views.generic import FormView, ListView from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponseRedirect from django.conf import settings class AdminView(FormView): obj = None def set_obj(self): url = self.kwargs.get('url') if url: obj = get_object_or_404(self.model, url=url) self.obj = obj return obj slug = self.kwargs.get('slug') if slug: obj = get_object_or_404(self.model, slug=slug) 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 class AdminListView(FormView): 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 = paginate_results(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_context_data(self, **kwargs): context = super(AdminListView, self).get_context_data(**kwargs) qs = self.model.objects.all() result = paginate_results(qs, page=self.request.GET.get('page')) context['object_list'] = result return context """ class AdminListView(ListView): model = None paginate_by = settings.ADMIN_PAGINATION template_name = None filter_form = None def get_queryset(self): if self.filter_form is None: return super(AdminListView, self).get_queryset() else: form = self.filter_form(self.request.GET) if form.is_valid(): result = form.filter() return result else: return super(AdminListView, self).get_queryset() def get_context_data(self, **kwargs): context = super(AdminListView, self).get_context_data(self, **kwargs) context = """