Skip to content

Instantly share code, notes, and snippets.

@dkrnl
Last active August 29, 2015 14:06
Show Gist options
  • Save dkrnl/dcde14462523ef8a30a2 to your computer and use it in GitHub Desktop.
Save dkrnl/dcde14462523ef8a30a2 to your computer and use it in GitHub Desktop.
Django KLADR models
# _*_ 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