src/p4l/views.py
author cavaliet
Thu, 29 Aug 2013 15:42:00 +0200
changeset 7 02008d61c3c8
parent 5 62e97cd13730
child 8 d10cdb768a03
permissions -rw-r--r--
record view + correct import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     2
'''
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     3
Created on Aug 27, 2013
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     4
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     5
@author: tc
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     6
'''
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     7
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     8
from django.conf import settings
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
     9
#from django.core.paginator import Paginator, InvalidPage, EmptyPage
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    10
#from django.db.models import Count
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    11
#from django.http.response import HttpResponse, HttpResponseForbidden
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    12
from django.shortcuts import get_object_or_404
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    13
from django.views.generic import ListView, DetailView#, View
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    14
#from django.views.generic.list import MultipleObjectMixin
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    15
from .models import Record
4
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    16
from .forms import RecordFilterForm
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    17
import logging
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    18
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    19
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    20
logger = logging.getLogger(__name__)
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    21
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    22
class RecordListView(ListView):
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    23
    
5
62e97cd13730 debug query and enhance display
cavaliet
parents: 4
diff changeset
    24
    queryset = Record.objects.select_related("language").prefetch_related('titles').distinct()  # @UndefinedVariable
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    25
    paginate_by = settings.NB_RECORDS_BY_PAGE
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    26
    template_name = "p4l/p4l_home.html"
4
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    27
    form_class = RecordFilterForm
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    28
    
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    29
    
4
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    30
    def get_context_data(self, **kwargs):
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    31
        context = ListView.get_context_data(self, **kwargs)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    32
        context['filter_form'] = self.form_class()
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    33
        # Add filter params from GET params
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    34
        filter_params = {}
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    35
        if 'title' in self.request.GET:
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    36
            filter_params['title'] = self.request.GET['title']
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    37
        context['filter_params'] = filter_params
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    38
        return context
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    39
    
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    40
    def get_queryset(self):
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    41
        qs = super(RecordListView, self).get_queryset()
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    42
        filter_form = self.form_class(self.request.GET)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    43
        if filter_form.is_valid():
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    44
            return filter_form.get_filter_qs(qs)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    45
        else:
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    46
            return qs
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    47
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    48
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    49
class RecordDetailView(DetailView):
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    50
    
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    51
    model = Record
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    52
    template_name = "p4l/p4l_record_view.html"
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    53
    slug_field = "uri" # Even if it is useless because we override get_objet
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    54
    
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    55
    def get_object(self, queryset=None):
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    56
        if "uri" not in self.request.GET:
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    57
            raise AttributeError(u"Record view must be called uri GET parameter")
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    58
        
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    59
        return get_object_or_404(Record.objects.select_related("language").prefetch_related('titles'), uri=self.request.GET["uri"])
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    60
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    61