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
))
46 qs
= qs
.filter(q
).distinct()
49 class Site(models
.Model
):
50 """Fiche d'info d'un site web"""
51 url
= models
.URLField(verify_exists
=False) # dc:identifier (dc:source?)
52 titre
= models
.CharField(max_length
=255, verbose_name
='Titre') # dc.title
53 description
= models
.TextField(null
=True, blank
=True)
54 editeur
= models
.CharField(max_length
=255, null
=True, blank
=True, verbose_name
='Éditeur') # dc.publisher : organisation resp
55 auteur
= models
.CharField(max_length
=255, null
=True, blank
=True, verbose_name
='Auteur') # dc.creator : nom, prénom
57 #auf_partenaire = models.BooleanField() # dc.contributor
59 date_publication
= models
.DateField(null
=True, blank
=True) # dc.date : date de publication
60 type = models
.CharField(max_length
=2, null
=True, blank
=True, choices
=TYPE_SITE_CHOICES
,
61 verbose_name
= 'Type de site') # dc.type
62 discipline
= models
.ManyToManyField(Discipline
, blank
=True)
63 thematique
= models
.ManyToManyField(Thematique
, blank
=True)
65 mots_cles
= models
.TextField(verbose_name
='Mots-clés', null
=True, blank
=True) # dc:subject # indexation libre
67 # source # dc:source (dc:relation?)
68 pays
= models
.ForeignKey(Pays
, null
= True, blank
=True, db_column
='pays', to_field
='code', verbose_name
= 'Pays')
71 actif
= models
.BooleanField()
72 date_maj
= models
.DateField(auto_now
=True)
75 objects
= SiteManager()
77 def __unicode__(self
):
78 return "%s" % (self
.titre
)
80 def type_display(self
):
81 for t
in TYPE_SITE_CHOICES
: