Использование КЛАДР в M3-приложениях¶
В приложениях работа с КЛАДР заключается в выборе адреса. Для добавления на форму необходимо воспользоваться классом kladr.addrfield.ExtAddrComponent:
from kladr.addrfield import ExtAddrComponent
# ***********
class SomeWindow():
def __init__(self):
ur_address = ExtAddrComponent()
# *********
self.form.extend([
# *********
ur_address,
])
По умолчанию компонент выглядит следующим образом:
Настройка отображения компонента ExtAddrComponent¶
С помощью атрибута level устанавливается количество отображаемых полей. Перечень значений атрибута level:
- ExtAddrComponent.PLACE - отображается только поле населенного пункта
- ExtAddrComponent.STREET - отображаются поля населенного пункта и улицы
- ExtAddrComponent.HOUSE - отображаются поля населенного пункта, улицы и номера дома
- ExtAddrComponent.FLAT - отображаются поля населенного пункта, улицы, номера дома и номера квартиры (по умолчанию)
С помощью атрибута view_mode устанавливается высота компонента. Перечень значений атрибута view_mode:
- ExtAddrComponent.VIEW_1 - все поля выстраиваются в одну строку + поле полного адреса
- ExtAddrComponent.VIEW_2 - все поля выстраиваются в две строки + поле полного адреса (по умолчанию). Данный параметр не используется при значении атрибута level == ExtAddrComponent.PLACE
- ExtAddrComponent.VIEW_3 - все поля выстраиваются в три строки + поле полного адреса. Данный параметр не используется при значенияз атрибута level == ExtAddrComponent.PLACE или ExtAddrComponent.STREET
Для сохранения адреса в моделях приложения необходимо определить в них поля соответствующие кодам полей компонента 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'Дом/Корпус'