Merge branch 'master' of ssh://gitosis@git.auf/auf_savoirs_en_partage_django
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / models.py
CommitLineData
01a9197e 1# -*- encoding: utf-8 -*-
2from django.db import models
878de341 3from django.db.models import Q
03e081cb
AJ
4from datamaster_modeles.models import *
5from savoirs.models import Discipline
01a9197e 6
7TYPE_SITE_CHOICES = (
8 ('RV', 'Revue en ligne'),
9 ('BB', 'Bibliothèque en ligne'),
00755d9b 10 ('FD', 'Fonds documentaire'),
01a9197e 11 ('AR', 'Archive ouverte'),
12 ('CO', 'Cours en ligne'),
00755d9b
AJ
13 ('RE', 'Repertoire de ressource'),
14 ('SA', 'Site associatif'),
15 ('SC', 'Site culturel'),
16 ('SI', 'Site d\'information'),
01a9197e 17 ('AU', 'Autre type de site'),
18 )
19
878de341
EMS
20class 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
28class 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) |
abd9c3d7
EMS
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()
878de341
EMS
41 return qs
42
01a9197e 43class Site(models.Model):
44 """Fiche d'info d'un site web"""
f810842d 45 url = models.URLField(verify_exists=False) # dc:identifier (dc:source?)
03e081cb 46 titre = models.CharField(max_length=255, verbose_name='Titre') # dc.title
e7d36875
AJ
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
03e081cb
AJ
50
51 #auf_partenaire = models.BooleanField() # dc.contributor
52
e7d36875
AJ
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,
01a9197e 55 verbose_name = 'Type de site') # dc.type
03e081cb
AJ
56 discipline = models.ManyToManyField(Discipline, blank=True)
57 thematique = models.ManyToManyField(Thematique, blank=True)
58
e7d36875 59 mots_cles = models.TextField(verbose_name='Mots-clés', null=True, blank=True) # dc:subject # indexation libre
01a9197e 60
61 # source # dc:source (dc:relation?)
e7d36875 62 pays = models.ForeignKey(Pays, null = True, blank=True, db_column='pays', to_field='code', verbose_name = 'Pays')
01a9197e 63
64 # meta
65 actif = models.BooleanField()
03e081cb 66 date_maj = models.DateField(auto_now=True)
878de341
EMS
67
68 # Manager
69 objects = SiteManager()
6e001443 70
71 def __unicode__(self):
c08cba47 72 return "%s" % (self.titre)
54ab837c
AJ
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