1 # -*- encoding: utf-8 -*-
2 from django
.db
import models
3 from django
.db
.models
import Q
4 from datamaster_modeles
.models
import *
5 from savoirs
.models
import Discipline
8 ('RV', 'Revue en ligne'),
9 ('BB', 'Bibliothèque en ligne'),
10 ('FD', 'Fonds documentaire'),
11 ('AR', 'Archive ouverte'),
12 ('CO', 'Cours en ligne'),
13 ('RE', 'Repertoire de ressource'),
14 ('SA', 'Site associatif'),
15 ('SC', 'Site culturel'),
16 ('SI', 'Site d\'information'),
17 ('AU', 'Autre type de site'),
20 class SiteManager(models
.Manager
):
22 def get_query_set(self
):
23 return SiteQuerySet(self
.model
)
25 def search(self
, text
):
26 return self
.get_query_set().search(text
)
28 class SiteQuerySet(models
.query
.QuerySet
):
30 def search(self
, text
):
33 for word
in text
.split():
34 part
= (Q(titre__icontains
=word
) |
35 Q(description__icontains
=word
) |
36 Q(editeur__icontains
=word
) |
37 Q(auteur__icontains
=word
) |
38 Q(mots_cles__icontains
=word
) |
39 Q(discipline__nom__icontains
=word
) |
40 Q(pays__nom__icontains
=word
) |
41 Q(pays__region__nom__icontains
=word
))
47 qs
= qs
.filter(q
).distinct()
50 class Site(models
.Model
):
51 """Fiche d'info d'un site web"""
52 url
= models
.URLField(verify_exists
=False) # dc:identifier (dc:source?)
53 titre
= models
.CharField(max_length
=255, verbose_name
='Titre') # dc.title
54 description
= models
.TextField(null
=True, blank
=True)
55 editeur
= models
.CharField(max_length
=255, null
=True, blank
=True, verbose_name
='Éditeur') # dc.publisher : organisation resp
56 auteur
= models
.CharField(max_length
=255, null
=True, blank
=True, verbose_name
='Auteur') # dc.creator : nom, prénom
58 #auf_partenaire = models.BooleanField() # dc.contributor
60 date_publication
= models
.DateField(null
=True, blank
=True) # dc.date : date de publication
61 type = models
.CharField(max_length
=2, null
=True, blank
=True, choices
=TYPE_SITE_CHOICES
,
62 verbose_name
= 'Type de site') # dc.type
63 discipline
= models
.ManyToManyField(Discipline
, blank
=True)
64 thematique
= models
.ManyToManyField(Thematique
, blank
=True)
66 mots_cles
= models
.TextField(verbose_name
='Mots-clés', null
=True, blank
=True) # dc:subject # indexation libre
68 # source # dc:source (dc:relation?)
69 pays
= models
.ForeignKey(Pays
, null
= True, blank
=True, db_column
='pays', to_field
='code', verbose_name
= 'Pays')
72 actif
= models
.BooleanField()
73 date_maj
= models
.DateField(auto_now
=True)
76 objects
= SiteManager()
78 def __unicode__(self
):
79 return "%s" % (self
.titre
)
81 def type_display(self
):
82 for t
in TYPE_SITE_CHOICES
: