def search(self, params): # self.check_required_params(params) limit = 20 search_string = params.get('search_string').strip() search_layers = params.get('search_layers') similar_results = ( IndexData.objects # .filter(project=settings.QGIS_PROJECT_ID) .filter(index__name__in=search_layers) ) if search_string.startswith('='): similar_results = similar_results.filter( text=search_string[1:].upper() ) elif search_string.startswith('^'): similar_results = similar_results.filter( text__startswith=search_string[1:].upper() ) else: similar_results = similar_results.extra( where=['text LIKE %s'], params=[self._prepare_search_string(search_string)] ) # groupby (itertools) requires and ordered set similar_results = similar_results.order_by('index_id')[:limit] with change_directory(self.project_root): return self._get_features_for_layers(similar_results)
def handle(self, *args, **options): project = Project.objects.get(pk=settings.SUNLUMO_PROJECT_ID) sunlumo_project = SunlumoProject(project.project_path) with transaction.atomic(): with change_directory(sunlumo_project.project_root): # get search indices indices = IndexSpecification.objects.filter( project_id=settings.SUNLUMO_PROJECT_ID ) for index in indices: l_id = index.layer_id qgs_layer = sunlumo_project.layerRegistry.mapLayer(l_id) qgs_layer.dataProvider().setEncoding('UTF-8') index_features(qgs_layer.getFeatures(), index)