summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py77
1 files changed, 49 insertions, 28 deletions
diff --git a/chimere/models.py b/chimere/models.py
index 07a2967..0582d34 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -51,9 +51,7 @@ from django.utils.translation import ugettext_lazy as _
from chimere.widgets import HiddenPointChooserWidget, PointField, RouteField, \
SelectMultipleField, TextareaWidget, DatePickerWidget, PolygonField, \
JQueryAutoComplete
-from chimere.utils import KMLManager, OSMManager, ShapefileManager, \
- GeoRSSManager, CSVManager, HtmlXsltManager, XMLXsltManager, JsonManager, \
- IcalManager
+from chimere import utils
class Page(models.Model):
@@ -427,15 +425,15 @@ STATUS = (('S', _('Submited')),
('I', _('Imported')))
STATUS_DCT = dict(STATUS)
-IMPORTERS = {'KML': KMLManager,
- 'OSM': OSMManager,
- 'SHP': ShapefileManager,
- 'RSS': GeoRSSManager,
- 'CSV': CSVManager,
- 'JSON': JsonManager,
- 'ICAL': IcalManager,
- 'XSLT': HtmlXsltManager,
- 'XXLT': XMLXsltManager
+IMPORTERS = {'KML': utils.KMLManager,
+ 'OSM': utils.OSMManager,
+ 'SHP': utils.ShapefileManager,
+ 'RSS': utils.GeoRSSManager,
+ 'CSV': utils.CSVManager,
+ 'JSON': utils.JsonManager,
+ 'ICAL': utils.IcalManager,
+ 'XSLT': utils.HtmlXsltManager,
+ 'XXLT': utils.XMLXsltManager
}
IMPORTER_CHOICES = (('KML', 'KML'),
@@ -543,9 +541,9 @@ OVERLAY_CHOICES = (
class Overlay(models.Model):
- '''
+ """
Static overlay on the map
- '''
+ """
name = models.CharField(_("Name"), max_length=150)
overlay_type = models.CharField(_("Importer type"), max_length=4,
choices=OVERLAY_CHOICES)
@@ -785,10 +783,6 @@ class GeographicItem(models.Model):
return False
@classmethod
- def properties(cls):
- return [pm for pm in PropertyModel.objects.filter(available=True)]
-
- @classmethod
def all_properties(cls):
return [pm for pm in PropertyModel.objects.all()]
@@ -870,6 +864,42 @@ class GeographicItem(models.Model):
return cls.getGeoJSONs(q)
return q
+ def update_search_vector(self, save=True):
+ """
+ Update the search vector
+ :param save: True if you want to save the object immediately
+ :return: self
+ """
+ search_vectors = []
+ base_q = self.__class__.objects.filter(pk=self.pk)
+ for cat in self.categories.values('pk').all():
+ q = copy.copy(base_q).filter(categories__pk=cat['pk'])
+ q = q.annotate(
+ search=SearchVector(
+ 'categories__name',
+ 'categories__keywords',
+ config=settings.CHIMERE_SEARCH_LANGUAGE
+ ))
+ search_vectors.append(q.all()[0].search)
+ for pm in self.properties.values('pk').all():
+ q = copy.copy(base_q).filter(properties__pk=pm['pk'])
+ q = q.annotate(
+ search=SearchVector(
+ 'properties__search_value',
+ config=settings.CHIMERE_SEARCH_LANGUAGE
+ ))
+ search_vectors.append(q.all()[0].search)
+ q = base_q.annotate(
+ search=SearchVector(
+ 'name', 'description', 'keywords',
+ config=settings.CHIMERE_SEARCH_LANGUAGE
+ ))
+ search_vectors.append(q.all()[0].search)
+ self.search_vector = utils.merge_tsvectors(search_vectors)
+ if save:
+ self.save()
+ return self
+
def weighted_post_save(sender, **kwargs):
if not kwargs['instance']:
@@ -1118,16 +1148,7 @@ def geometry_post_save(pre_save_geom_values):
if not getattr(instance, '_search_updated', None):
instance._search_updated = True
- q = instance.__class__.objects.filter(pk=instance.pk)
- q = q.annotate(
- search=SearchVector(
- 'name', 'description',
- 'keywords',
- 'categories__keywords',
- 'properties__search_value',
- config=settings.CHIMERE_SEARCH_LANGUAGE
- ))
- instance.search_vector = q.all()[0].search
+ instance.update_search_vector(save=False)
changed = True
if changed: