diff options
Diffstat (limited to 'chimere/models.py')
-rw-r--r-- | chimere/models.py | 77 |
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: |