@ -1,11 +1,7 @@
# -*- coding: utf-8 -*-
import random
from datetime import datetime
from accounts . models import User
from city . models import City
from company . models import Company
from conference . models import Conference
from country . models import Country
from django . conf import settings
from django . contrib . admin . views . decorators import staff_member_required
from django . contrib . auth . decorators import login_required
@ -20,6 +16,7 @@ from django.core.paginator import (
from django . core . urlresolvers import reverse_lazy
from django . db . models . deletion import ProtectedError
from django . db . models . loading import get_model
from django . db . models . query import QuerySet
from django . http import Http404 , HttpResponse , HttpResponseRedirect
from django . shortcuts import render_to_response
from django . utils . translation import get_language as lang
@ -31,13 +28,20 @@ from django.views.generic.detail import (
SingleObjectTemplateResponseMixin
)
from django . views . generic . edit import ModelFormMixin , ProcessFormView
from accounts . models import User
from city . models import City
from company . models import Company
from conference . models import Conference
from country . models import Country
from exposition . models import Exposition
from file . forms import FileModelForm
from file . models import TmpFile
from functions . forms import AdminSearchForm
from functions . views_help import split_params
from functions . http import JsonResponse
from haystack . query import EmptySearchQuerySet
from haystack . query import EmptySearchQuerySet , SearchQuerySet
from haystack . backends import SearchNode
from hvad . utils import get_translation_aware_manager
from meta . models import MetaSetting
from meta . views import Meta
@ -547,3 +551,39 @@ class ContextMixin(object):
context = super ( ContextMixin , self ) . get_context_data ( * * kwargs )
context . update ( self . extra_ctx )
return context
class ReverseOrderMixin ( ContextMixin ) :
def get_reversed_qs ( self , qs ) :
# exclude_fields
ef = [ ' data_begin ' , ' data_end ' ]
children = list ( filter ( lambda x : not set ( [ y [ 0 ] . col for y in x . children ] ) . intersection ( ef ) , qs . query . where . children ) )
qs . query . where . children = children
self . extra_ctx [ ' events_reversed ' ] = True
return qs . filter ( data_begin__lte = datetime . now ( ) ) . order_by ( ' -data_begin ' )
def get_reversed_sqs ( self , qs ) :
# exclude_fields
ef = [ ' data_begin ' ]
childrens = [ ]
for children in qs . query . query_filter . children :
if isinstance ( children , tuple ) :
if children [ 0 ] . startswith ( ' data_begin ' ) :
continue
elif isinstance ( children , SearchNode ) :
node_childrens = list ( filter ( lambda x : not x [ 0 ] . startswith ( ' data_begin ' ) , children . children ) )
if node_childrens :
children . children = node_childrens
childrens . append ( children )
qs . query . query_filter . children = childrens
self . extra_ctx [ ' events_reversed ' ] = True
qs . query . clear_order_by ( )
return qs . filter ( data_begin__lte = datetime . now ( ) ) . order_by ( ' -data_begin ' )
def get_queryset ( self ) :
qs = super ( ReverseOrderMixin , self ) . get_queryset ( )
if isinstance ( qs , SearchQuerySet ) and qs . count ( ) == 0 :
qs = self . get_reversed_sqs ( qs )
elif isinstance ( qs , QuerySet ) and not qs . exists ( ) :
qs = self . get_reversed_qs ( qs )
return qs