ba8cc8d112b26a5e39ac6d24d315a5c1c749a080
[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 return qs
39
40 class Site(models.Model):
41 """Fiche d'info d'un site web"""
42 url = models.URLField(verify_exists=False) # dc:identifier (dc:source?)
43 titre = models.CharField(max_length=255, verbose_name='Titre') # dc.title
44 description = models.TextField(null=True, blank=True)
45 editeur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Éditeur') # dc.publisher : organisation resp
46 auteur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Auteur') # dc.creator : nom, prénom
47
48 #auf_partenaire = models.BooleanField() # dc.contributor
49
50 date_publication = models.DateField(null=True, blank=True) # dc.date : date de publication
51 type = models.CharField(max_length=2, null=True, blank=True, choices=TYPE_SITE_CHOICES,
52 verbose_name = 'Type de site') # dc.type
53 discipline = models.ManyToManyField(Discipline, blank=True)
54 thematique = models.ManyToManyField(Thematique, blank=True)
55
56 mots_cles = models.TextField(verbose_name='Mots-clés', null=True, blank=True) # dc:subject # indexation libre
57
58 # source # dc:source (dc:relation?)
59 pays = models.ForeignKey(Pays, null = True, blank=True, db_column='pays', to_field='code', verbose_name = 'Pays')
60
61 # meta
62 actif = models.BooleanField()
63 date_maj = models.DateField(auto_now=True)
64
65 # Manager
66 objects = SiteManager()
67
68 def __unicode__(self):
69 return "%s" % (self.titre)
70
71 def type_display(self):
72 for t in TYPE_SITE_CHOICES:
73 if self.type == t[0]:
74 return t[1]
75 return "-"
76