ae000f57159f2d9e6f92251a4d6ef1bbf88261b5
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / models.py
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
6
7 TYPE_SITE_CHOICES = (
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'),
18 )
19
20 class SiteManager(models.Manager):
21
22 def get_query_set(self):
23 return SiteQuerySet(self.model)
24
25 def search(self, text):
26 return self.get_query_set().search(text)
27
28 class SiteQuerySet(models.query.QuerySet):
29
30 def search(self, text):
31 qs = self
32 for word in text.split():
33 qs = qs.filter(Q(titre__icontains=word) |
34 Q(description__icontains=word) |
35 Q(editeur__icontains=word) |
36 Q(auteur__icontains=word) |
37 Q(mots_cles__icontains=word) |
38 Q(discipline__nom__icontains=word) |
39 Q(pays__nom__icontains=word) |
40 Q(pays__region__nom__icontains=word)).distinct()
41 return qs
42
43 class Site(models.Model):
44 """Fiche d'info d'un site web"""
45 url = models.URLField(verify_exists=False) # dc:identifier (dc:source?)
46 titre = models.CharField(max_length=255, verbose_name='Titre') # dc.title
47 description = models.TextField(null=True, blank=True)
48 editeur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Éditeur') # dc.publisher : organisation resp
49 auteur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Auteur') # dc.creator : nom, prénom
50
51 #auf_partenaire = models.BooleanField() # dc.contributor
52
53 date_publication = models.DateField(null=True, blank=True) # dc.date : date de publication
54 type = models.CharField(max_length=2, null=True, blank=True, choices=TYPE_SITE_CHOICES,
55 verbose_name = 'Type de site') # dc.type
56 discipline = models.ManyToManyField(Discipline, blank=True)
57 thematique = models.ManyToManyField(Thematique, blank=True)
58
59 mots_cles = models.TextField(verbose_name='Mots-clés', null=True, blank=True) # dc:subject # indexation libre
60
61 # source # dc:source (dc:relation?)
62 pays = models.ForeignKey(Pays, null = True, blank=True, db_column='pays', to_field='code', verbose_name = 'Pays')
63
64 # meta
65 actif = models.BooleanField()
66 date_maj = models.DateField(auto_now=True)
67
68 # Manager
69 objects = SiteManager()
70
71 def __unicode__(self):
72 return "%s" % (self.titre)
73
74 def type_display(self):
75 for t in TYPE_SITE_CHOICES:
76 if self.type == t[0]:
77 return t[1]
78 return "-"
79