Last active
August 29, 2015 14:06
-
-
Save dkrnl/dcde14462523ef8a30a2 to your computer and use it in GitHub Desktop.
Django KLADR models
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# _*_ coding: utf-8 _*_ | |
# http://xn--80aiqe1a.xn--p1ai/kladr.html | |
from django.db import models | |
class KladrManager(models.Manager): | |
def filter_state(self, code=None, actual=True, queryset=None): | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%000000000__"]) | |
if code: | |
if hasattr(code, "code"): | |
code = code.code | |
assert len(str(code)) >= 2, "Argument \"code\" is less than 2 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % code[0:2]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
def filter_region(self, state, code=None, actual=True, queryset=None): | |
if hasattr(state, "code"): | |
state = state.code | |
assert len(str(state)) >= 2, "Argument \"state\" is less than 2 characters long." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["NOT code LIKE %s"], params=["%000000000__"]) | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%000000__"]) | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % state[0:2]]) | |
if code: | |
if hasattr(code, "code"): | |
code = code.code | |
assert len(str(code)) >= 5, "Argument \"code\" is less than 5 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % code[0:5]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
def filter_location(self, state=None, region=None, actual=True, queryset=None): | |
assert state != None or region != None, "Required \"state\" or \"region\" argument." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["NOT code LIKE %s"], params=["%000000__"]) | |
if state: | |
if hasattr(state, "code"): | |
state = state.code | |
assert len(str(state)) >= 2, "Argument \"state\" is less than 2 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % state[0:2]]) | |
if region: | |
if hasattr(region, "code"): | |
region = region.code | |
assert len(str(region)) >= 5, "Argument \"region\" is less than 5 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % region[0:5]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
def filter_city(self, state=None, region=None, actual=True, queryset=None): | |
assert state != None or region != None, "Required \"state\" or \"region\" argument." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["NOT code LIKE %s"], params=["%000000__"]) | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%000__"]) | |
if state: | |
if hasattr(state, "code"): | |
state = state.code | |
assert len(str(state)) >= 2, "Argument \"state\" is less than 2 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % state[0:2]]) | |
if region: | |
if hasattr(region, "code"): | |
region = region.code | |
assert len(str(region)) >= 5, "Argument \"region\" is less than 5 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % region[0:5]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
def filter_ville(self, state=None, region=None, actual=True, queryset=None): | |
assert state != None or region != None, "Required \"state\" or \"region\" argument." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["NOT code LIKE %s"], params=["%000__"]) | |
if state: | |
if hasattr(state, "code"): | |
state = state.code | |
assert len(str(state)) >= 2, "Argument \"state\" is less than 2 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % state[0:2]]) | |
if region: | |
if hasattr(region, "code"): | |
region = region.code | |
assert len(str(region)) >= 5, "Argument \"region\" is less than 5 characters long." | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % region[0:5]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
class Kladr(models.Model): | |
""" | |
Классификатор адресов | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов" | |
verbose_name_plural = u"Классификатор адреса" | |
objects = KladrManager() | |
""" | |
ССРРРГГГПППКК, где | |
СС – код субъекта Российской Федерации (региона); | |
РРР – код района; | |
ГГГ – код города; | |
ППП – код населенного пункта; | |
КК – код актуальности наименования. | |
""" | |
code = models.CharField(verbose_name=u"CODE", max_length=255, null=True, blank=True, db_index=True) | |
name = models.CharField(verbose_name=u"NAME", max_length=255, null=True, blank=True, db_index=True) | |
socr = models.CharField(verbose_name=u"SOCR", max_length=255, null=True, blank=True, db_index=True) | |
index = models.CharField(verbose_name=u"INDEX", max_length=255, null=True, blank=True, db_index=True) | |
gninmb = models.CharField(verbose_name=u"GNINMB", max_length=255, null=True, blank=True, db_index=True) | |
uno = models.CharField(verbose_name=u"UNO", max_length=255, null=True, blank=True, db_index=True) | |
ocatd = models.CharField(verbose_name=u"OCATD", max_length=255, null=True, blank=True, db_index=True) | |
status = models.CharField(verbose_name=u"STATUS", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s %s #%s" % (self.name, self.socr, self.code) | |
class KladrStreetManager(models.Manager): | |
def filter_location(self, location, actual=True, queryset=None): | |
if hasattr(location, "code"): | |
location = location.code | |
assert len(str(location)) >= 11, "Argument \"location\" is less than 11 characters long." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % location[0:11]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
class KladrStreet(models.Model): | |
""" | |
Классификатор адресов: улицы | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов: улицы" | |
verbose_name_plural = u"Классификатор адресов: улиц" | |
objects = KladrStreetManager() | |
""" | |
ССРРРГГГПППУУУУКК, где | |
СС – код субъекта Российской Федерации (региона); | |
РРР – код района; | |
ГГГ – код города; | |
ППП – код населенного пункта; | |
УУУУ – код улицы; | |
КК – код актуальности наименования. | |
""" | |
code = models.CharField(verbose_name=u"CODE", max_length=255, null=True, blank=True, db_index=True) | |
name = models.CharField(verbose_name=u"NAME", max_length=255, null=True, blank=True, db_index=True) | |
socr = models.CharField(verbose_name=u"SOCR", max_length=255, null=True, blank=True, db_index=True) | |
index = models.CharField(verbose_name=u"INDEX", max_length=255, null=True, blank=True, db_index=True) | |
gninmb = models.CharField(verbose_name=u"GNINMB", max_length=255, null=True, blank=True, db_index=True) | |
uno = models.CharField(verbose_name=u"UNO", max_length=255, null=True, blank=True, db_index=True) | |
ocatd = models.CharField(verbose_name=u"OCATD", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s %s #%s" % (self.name, self.socr, self.code) | |
class KladrDomaManager(models.Manager): | |
def filter_street(self, street, actual=True, queryset=None): | |
if hasattr(street, "code"): | |
street = street.code | |
assert len(str(state)) >= 15, "Argument \"street\" is less than 15 characters long." | |
if queryset is None: | |
queryset = self.get_query_set() | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%s%%" % street[0:15]]) | |
if actual: | |
queryset = queryset.extra(where=["code LIKE %s"], params=["%00"]) | |
return queryset | |
class KladrDoma(models.Model): | |
""" | |
Классификатор адресов: дома | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов: дома" | |
verbose_name_plural = u"Классификатор адресов: дом" | |
objects = KladrDomaManager() | |
""" | |
ССРРРГГГПППУУУУКК, где | |
СС – код субъекта Российской Федерации (региона); | |
РРР – код района; | |
ГГГ – код города; | |
ППП – код населенного пункта; | |
УУУУ – код улицы; | |
КК – код актуальности наименования. | |
""" | |
code = models.CharField(verbose_name=u"CODE", max_length=255, null=True, blank=True, db_index=True) | |
name = models.CharField(verbose_name=u"NAME", max_length=255, null=True, blank=True, db_index=True) | |
korp = models.CharField(verbose_name=u"KORP", max_length=255, null=True, blank=True, db_index=True) | |
socr = models.CharField(verbose_name=u"SOCR", max_length=255, null=True, blank=True, db_index=True) | |
index = models.CharField(verbose_name=u"INDEX", max_length=255, null=True, blank=True, db_index=True) | |
gninmb = models.CharField(verbose_name=u"GNINMB", max_length=255, null=True, blank=True, db_index=True) | |
uno = models.CharField(verbose_name=u"UNO", max_length=255, null=True, blank=True, db_index=True) | |
ocatd = models.CharField(verbose_name=u"OCATD", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s #%s" % (self.name, self.code) | |
class KladrFlatManager(models.Manager): | |
pass | |
class KladrFlat(models.Model): | |
""" | |
Классификатор адресов: квартиры | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов: квартиры" | |
verbose_name_plural = u"Классификатор адресов: квартира" | |
objects = KladrFlatManager() | |
""" | |
ССРРРГГГПППУУУУКК, где | |
СС – код субъекта Российской Федерации (региона); | |
РРР – код района; | |
ГГГ – код города; | |
ППП – код населенного пункта; | |
УУУУ – код улицы; | |
КК – код актуальности наименования. | |
""" | |
code = models.CharField(verbose_name=u"CODE", max_length=255, null=True, blank=True, db_index=True) | |
np = models.CharField(verbose_name=u"NP", max_length=255, null=True, blank=True, db_index=True) | |
gninmb = models.CharField(verbose_name=u"GNINMB", max_length=255, null=True, blank=True, db_index=True) | |
name = models.CharField(verbose_name=u"NAME", max_length=255, null=True, blank=True, db_index=True) | |
index = models.CharField(verbose_name=u"INDEX", max_length=255, null=True, blank=True, db_index=True) | |
uno = models.CharField(verbose_name=u"UNO", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s #%s" % (self.name, self.code) | |
class KladrAltnamesManager(models.Manager): | |
pass | |
class KladrAltnames(models.Model): | |
""" | |
Классификатор адресов: алиасы | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов: алиасы" | |
verbose_name_plural = u"Классификатор адресов: алиас" | |
objects = KladrAltnamesManager() | |
oldcode = models.CharField(verbose_name=u"OLDCODE", max_length=255, null=True, blank=True, db_index=True) | |
newcode = models.CharField(verbose_name=u"NEWCODE", max_length=255, null=True, blank=True, db_index=True) | |
level = models.CharField(verbose_name=u"LEVEL", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s=%s" % (self.oldcode, self.newcode) | |
class KladrSocrbaseManager(models.Manager): | |
pass | |
class KladrSocrbase(models.Model): | |
""" | |
Классификатор адресов: сокращения | |
""" | |
class Meta: | |
verbose_name = u"Классификатор адресов: сокращения" | |
verbose_name_plural = u"Классификатор адресов: сокращение" | |
objects = KladrSocrbaseManager() | |
level = models.CharField(verbose_name=u"LEVEL", max_length=255, null=True, blank=True, db_index=True) | |
scname = models.CharField(verbose_name=u"SCNAME", max_length=255, null=True, blank=True, db_index=True) | |
socrname = models.CharField(verbose_name=u"SOCRNAME", max_length=255, null=True, blank=True, db_index=True) | |
kod_t_st = models.CharField(verbose_name=u"KOD_T_ST", max_length=255, null=True, blank=True, db_index=True) | |
def __unicode__(self): | |
return u"%s=%s" % (self.scname, self.socrname) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment