Использование КЛАДР в M3-приложениях

В приложениях работа с КЛАДР заключается в выборе адреса. Для добавления на форму необходимо воспользоваться классом kladr.addrfield.ExtAddrComponent:

from kladr.addrfield import ExtAddrComponent
# ***********

class SomeWindow():

    def __init__(self):

        ur_address = ExtAddrComponent()

        # *********

        self.form.extend([
            # *********
            ur_address,
        ])

По умолчанию компонент выглядит следующим образом:

_images/addrcomponent-default.png

Настройка отображения компонента ExtAddrComponent

С помощью атрибута level устанавливается количество отображаемых полей. Перечень значений атрибута level:

  • ExtAddrComponent.PLACE - отображается только поле населенного пункта
  • ExtAddrComponent.STREET - отображаются поля населенного пункта и улицы
  • ExtAddrComponent.HOUSE - отображаются поля населенного пункта, улицы и номера дома
  • ExtAddrComponent.FLAT - отображаются поля населенного пункта, улицы, номера дома и номера квартиры (по умолчанию)
_images/addrcomponent-level2.png

ExtAddrComponent с атрибутом level равным ExtAddrComponent.STREET

С помощью атрибута view_mode устанавливается высота компонента. Перечень значений атрибута view_mode:

  • ExtAddrComponent.VIEW_1 - все поля выстраиваются в одну строку + поле полного адреса
  • ExtAddrComponent.VIEW_2 - все поля выстраиваются в две строки + поле полного адреса (по умолчанию). Данный параметр не используется при значении атрибута level == ExtAddrComponent.PLACE
  • ExtAddrComponent.VIEW_3 - все поля выстраиваются в три строки + поле полного адреса. Данный параметр не используется при значенияз атрибута level == ExtAddrComponent.PLACE или ExtAddrComponent.STREET
_images/addrcomponent-view3.png

ExtAddrComponent с атрибутом view_mode равным ExtAddrComponent.VIEW_3

Для сохранения адреса в моделях приложения необходимо определить в них поля соответствующие кодам полей компонента ExtAddrComponent.

class SomeModel():
    # ***********
    place = models.CharField(max_length=13, null=True, default ='')  # Населенный пункт
    street = models.CharField(max_length=17, null=True, default ='') # Улица
    house = models.CharField(max_length=10, null=True, default ='')  # Дом
    flat = models.CharField(max_length=5, null=True, default ='')  # Квартира
    zipcode = models.CharField(max_length=6, null=True, default ='') # Индекс
    addr =  models.CharField(max_length=200, null=True, default ='') # Адрес

При необходимости стандартные коды полей компонента и подписи полей можно переопределить, например:

fact_address = ExtAddrComponent()
fact_address.flat_field_name = 'fact_flat'
fact_address.addr_field_name = 'fact_addr'
fact_address.street_field_name = 'fact_street'
fact_address.place_field_name = 'fact_place'
fact_address.house_field_name = 'fact_house'
fact_address.zipcode_field_name = 'fact_zipcode'
fact_address.house_label = u'Дом/Корпус'