Source code for django_geopostcodes.managers

# -*- coding: utf-8 -*-
"""
    django_geopostcodes.managers
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Django model managers for django-geopostcodes.
"""
from __future__ import absolute_import, print_function, unicode_literals
from django.contrib.gis.db.models.query import GeoQuerySet
from django.db.models.manager import Manager
from django.contrib.gis.db import models


[docs]class LocalityQuerySet(GeoQuerySet): """ Locality QuerySet. """ anything_fields = ['country', 'region1', 'region2', 'region3', 'region4', 'locality', 'postcode', 'suburb']
[docs] def anything(self, lookup_type, value, fields=anything_fields): queries = [models.Q(**{'%s__%s' % (field, lookup_type): value}) for field in fields] # Take one Q object from the list query = queries.pop() # Or the Q object with the ones remaining in the list for item in queries: query |= item return self.filter(query)
[docs] def anything_icontains(self, value, fields=anything_fields): return self.anything('icontains', value, fields)
[docs] def anything_contains(self, value, fields=anything_fields): return self.anything('contains', value, fields)
[docs] def anything_exact(self, value, fields=anything_fields): return self.anything('exact', value, fields)
[docs] def anything_iexact(self, value, fields=anything_fields): return self.anything('iexact', value, fields)
[docs] def anything_startswith(self, value, fields=anything_fields): return self.anything('startswith', value, fields)
[docs] def anything_istartswith(self, value, fields=anything_fields): return self.anything('istartswith', value, fields)
[docs] def anything_endswith(self, value, fields=anything_fields): return self.anything('endswith', value, fields)
[docs] def anything_iendswith(self, value, fields=anything_fields): return self.anything('iendswith', value, fields)
[docs]class LocalityManager(Manager.from_queryset(LocalityQuerySet)): "Overrides Manager to return Geographic QuerySets." # This manager should be used for queries on related fields # so that geometry columns on Oracle and MySQL are selected # properly. use_for_related_fields = True