# HG changeset patch # User cavaliet # Date 1377689791 -7200 # Node ID 047675624f4588af60bee89dce826f73eb102cee # Parent 63c5437a9b7d8ef68f06a8b666347315355845a9 first step of title search in list of records diff -r 63c5437a9b7d -r 047675624f45 src/p4l/forms.py --- a/src/p4l/forms.py Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/forms.py Wed Aug 28 13:36:31 2013 +0200 @@ -9,8 +9,10 @@ from django.contrib.auth.forms import (UserChangeForm as AuthUserChangeForm, UserCreationForm as AuthUserCreationForm) from django.core.exceptions import ValidationError -from django.forms.fields import ChoiceField +from django.forms import Form +from django.forms.fields import ChoiceField, CharField from django.utils.translation import ugettext as _ +from .models import Record User = get_user_model() @@ -34,3 +36,15 @@ language = ChoiceField(label=_("language"), choices=[(k,_(v)) for k,v in settings.LANGUAGES], initial=settings.LANGUAGE_CODE[:2]) class Meta: model = User + + +class RecordFilterForm(Form): + title = CharField(required=True, min_length=1) + def get_filter_qs(self, qs=None): + if qs is None: + qs = Record.objects.select_related("language").prefetch_related('titles') # @UndefinedVariable + t = self.cleaned_data.get('title',None) + if t: + qs = qs.filter(titles__title__icontains=t) + return qs + diff -r 63c5437a9b7d -r 047675624f45 src/p4l/models/data.py --- a/src/p4l/models/data.py Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/models/data.py Wed Aug 28 13:36:31 2013 +0200 @@ -162,16 +162,16 @@ class Record(P4lModel): uri = models.URLField(max_length=2048, unique=True, db_index=True) #subject - subjects = models.ManyToManyField('p4l.Subject') #dct:subject - themes = models.ManyToManyField('p4l.Theme') #iiep:theme - countries = models.ManyToManyField('p4l.Country') #iiep:country + subjects = models.ManyToManyField('p4l.Subject') #dct:subject # Thesaurus with no country + themes = models.ManyToManyField('p4l.Theme') #iiep:theme # Theme + countries = models.ManyToManyField('p4l.Country') #iiep:country # Thesaurus filtered with country only identifier = models.CharField(max_length=128, unique=True, db_index=True) #dct:identifier notes = models.TextField(blank=True, null=True) #iiep:notes #issns foreign key from Isbn #iiep:issn #isbns foreign key from Isbn #iiep:isbn #documentCodes foreign key from Isbn #iiep:documentCode - language = models.ForeignKey('p4l.Language', blank=True, null=True) #dct:language - otherLanguages = models.ManyToManyField('p4l.Language', related_name='otherLanguage_record') #iiep:otherLanguage + language = models.ForeignKey('p4l.Language', blank=True, null=True) #dct:language # Language + otherLanguages = models.ManyToManyField('p4l.Language', related_name='otherLanguage_record') #iiep:otherLanguage # Language #titles foreign Key from Title #dct:title #addedTitles foreign Key from AddedTitle #iiep:addedTitle #titlesMainDocument foreign Key from TitleMainDocument #iiep:titleMainDocument @@ -185,9 +185,9 @@ series = models.ManyToManyField('p4l.Serie', through='p4l.RecordSerie') #iiep:serie authors = models.ManyToManyField('p4l.Author') #iiep:author subjectPersons = models.ManyToManyField('p4l.SubjectPerson') #iiep:subjectPerson - subjectCorporateBodies = models.ManyToManyField('p4l.CorporateBody') #iiep:subjectCorporateBody + subjectCorporateBodies = models.ManyToManyField('p4l.CorporateBody') #iiep:subjectCorporateBody # Organisation ? subjectMeetings = models.ManyToManyField('p4l.SubjectMeeting') #iiep:subjectMeeting - corporateAuthors = models.ManyToManyField('p4l.CorporateAuthor') #iiep:corporateAuthor + corporateAuthors = models.ManyToManyField('p4l.CorporateAuthor') #iiep:corporateAuthor # Organisation ? #urls foreign Key from Url #iiep:url recordType = models.URLField(max_length=2048) #dct:type isDocumentPart = models.BooleanField() #iiep:isDocumentPart diff -r 63c5437a9b7d -r 047675624f45 src/p4l/static/p4l/css/p4l.css --- a/src/p4l/static/p4l/css/p4l.css Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/static/p4l/css/p4l.css Wed Aug 28 13:36:31 2013 +0200 @@ -6,3 +6,6 @@ margin: 0 auto; width: 950px; } +.table thead td:first-letter { + text-transform: uppercase; +} diff -r 63c5437a9b7d -r 047675624f45 src/p4l/templates/p4l/p4l_base.html --- a/src/p4l/templates/p4l/p4l_base.html Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/templates/p4l/p4l_base.html Wed Aug 28 13:36:31 2013 +0200 @@ -34,7 +34,7 @@ {% endblock %} {% block js_common %} - + {% endblock %} {% block js_page %} {% endblock %} diff -r 63c5437a9b7d -r 047675624f45 src/p4l/templates/p4l/p4l_home.html --- a/src/p4l/templates/p4l/p4l_home.html Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/templates/p4l/p4l_home.html Wed Aug 28 13:36:31 2013 +0200 @@ -1,6 +1,7 @@ {% extends "p4l/p4l_base.html" %} {% load static %} {% load i18n %} +{% load p4lstringfilters %} {% block content %}

{% trans 'Record List' %}

@@ -8,26 +9,30 @@ {% endif %} - + {% for record in object_list %} - - + + + + {% empty %} @@ -36,17 +41,26 @@
#URI
URIlang.{% trans 'title' %}{% trans 'actions' %}
{{ forloop.counter }}{{ record.uri }}{{ record.uri|reduce:"4,13" }}{{ record.language.language|reduce:"0,3" }}
    {% for t in record.titles.all %} +
  • {{ t.title }}
  • + {% endfor %}
{% trans 'No record' %}
{% if is_paginated %} {% endif %} +
+
+ +
+
{% endblock %} \ No newline at end of file diff -r 63c5437a9b7d -r 047675624f45 src/p4l/templatetags/__init__.py diff -r 63c5437a9b7d -r 047675624f45 src/p4l/templatetags/p4lstringfilters.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/p4l/templatetags/p4lstringfilters.py Wed Aug 28 13:36:31 2013 +0200 @@ -0,0 +1,19 @@ +from django.template import Library +from django.template.defaultfilters import stringfilter +from django.utils.safestring import SafeData + +register = Library() + + +@register.filter(is_safe=True, needs_autoescape=True) +@stringfilter +def reduce(value, nbs, autoescape=None): + """ + Replace a string by "..." and its last characters. Usefull to display strings where end matters + """ + autoescape = autoescape and not isinstance(value, SafeData) + # nbs is "nb_char_start,nb_char_end" + a = nbs.split(",") + nb_start = int(a[0]) + nb_end = int(a[1]) + return value[:nb_start] + "..." + value[-nb_end:] diff -r 63c5437a9b7d -r 047675624f45 src/p4l/views.py --- a/src/p4l/views.py Wed Aug 28 11:16:03 2013 +0200 +++ b/src/p4l/views.py Wed Aug 28 13:36:31 2013 +0200 @@ -12,37 +12,33 @@ from django.views.generic import ListView#, DetailView, View #from django.views.generic.list import MultipleObjectMixin from .models import Record +from .forms import RecordFilterForm import logging logger = logging.getLogger(__name__) class RecordListView(ListView): - queryset = Record.objects.select_related() # @UndefinedVariable + queryset = Record.objects.select_related("language").prefetch_related('titles') # @UndefinedVariable paginate_by = settings.NB_RECORDS_BY_PAGE - #paginator_class = JocondePaginator template_name = "p4l/p4l_home.html" - #filter_form_class = TermFilterForm + form_class = RecordFilterForm + -# def get_filter_form(self): -# initial = { 'order_by':'label', -# 'order_dir': 'asc', -# 'thesaurus': None, -# 'label': None, -# 'link_status': -1, -# 'validated': None} -# return self.filter_form_class(self.request.GET, initial=initial, auto_id=True) -# -# def get_context_data(self, **kwargs): -# context = ListView.get_context_data(self, **kwargs) -# context['filter_form'] = self.get_filter_form() -# context['term_tree_valid_thesaurus'] = json.dumps([entry['thesaurus__id'] for entry in Term.objects.root_nodes().values('thesaurus__id').annotate(root_nodes_count=Count('thesaurus__id')).order_by().filter(root_nodes_count__lt=settings.JOCONDE_TERM_TREE_MAX_ROOT_NODE)]) # @UndefinedVariable -# return context -# -# def get_queryset(self): -# qs = super(TermListView, self).get_queryset() -# filter_form = self.get_filter_form() -# if filter_form.is_valid(): -# return filter_form.get_filter_qs(qs) -# else: -# return None + def get_context_data(self, **kwargs): + context = ListView.get_context_data(self, **kwargs) + context['filter_form'] = self.form_class() + # Add filter params from GET params + filter_params = {} + if 'title' in self.request.GET: + filter_params['title'] = self.request.GET['title'] + context['filter_params'] = filter_params + return context + + def get_queryset(self): + qs = super(RecordListView, self).get_queryset() + filter_form = self.form_class(self.request.GET) + if filter_form.is_valid(): + return filter_form.get_filter_qs(qs) + else: + return qs