from django.views.generic.detail import DetailView from django.views.generic import ListView from django.contrib.auth.models import User from django.utils import timezone from utils.views import PaginatedListView,LuxDetailView from .models import AP, Sighting, FieldNote from django.db.models import Subquery class SightingListView(PaginatedListView): model = Sighting def get_queryset(self): qs_ids = Sighting.objects.order_by('ap__id', '-pub_date').distinct('ap').values_list('id', flat=True) return Sighting.objects.filter(id__in=qs_ids).order_by('-pub_date').prefetch_related('ap') def get_context_data(self, **kwargs): context = super(SightingListView, self).get_context_data(**kwargs) context['breadcrumbs'] = ['dialogues',] return context class LifeListView(ListView): template_name = 'sightings/life-list.html' def get_queryset(self): return Sighting.objects.filter(ap__apclass__kind=1).order_by('ap__id').distinct('ap') def get_context_data(self, **kwargs): context = super(LifeListView, self).get_context_data(**kwargs) context['breadcrumbs'] = ['dialogues',] return context class NotLifeListView(ListView): template_name = 'sightings/not_life_list.html' def get_queryset(self): return AP.objects.filter(apclass__kind=1).filter(have_seen=False) def get_context_data(self, **kwargs): context = super(NotLifeListView, self).get_context_data(**kwargs) context['breadcrumbs'] = ['dialogues',] return context class YearListView(ListView): template_name = 'sightings/year-list.html' def get_queryset(self): qs = Sighting.objects.filter( pk__in=Subquery( Sighting.objects.filter(ap__apclass__kind=1).filter(pub_date__year=self.kwargs['year']).order_by('ap_id').distinct('ap').values('pk') ) ).order_by('-pub_date') return qs #Sighting.objects.filter(ap__apclass__kind=1).filter(pub_date__year=self.kwargs['year']).order_by('ap__id','pub_date').distinct('ap') def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(YearListView, self).get_context_data(**kwargs) context['year'] = timezone.now().year return context class SightingListUserView(PaginatedListView): template_name = 'archives/sightings.html' def get_queryset(self): return Sighting.objects.filter( seen_by__username=self.kwargs['user'] ) def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(SightingListUserView, self).get_context_data(**kwargs) context['user'] = User.objects.get(username=self.kwargs['user']) return context class SightingDetailView(LuxDetailView): model = AP def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(SightingDetailView, self).get_context_data(**kwargs) context['field_notes'] = FieldNote.objects.filter( sighting__ap__slug=self.kwargs['slug'] ) context['sighting'] = Sighting.objects.filter( ap__slug=self.kwargs['slug'] ).prefetch_related('location') return context