Пользовательское поле адреса в Django Model - PullRequest
4 голосов
/ 30 января 2010

Какова общая практика представления почтовых адресов в моделях Django? Существует ли библиотека для пользовательских полей модели, которые включают поля почтовых адресов и потенциально могут обрабатывать проверку и форматирование?

Если библиотеки не существует, как я могу ее написать? Могу ли я представить составное поле (поле, которое сериализуется в несколько столбцов в БД) в Django? Надеюсь, что это устраняет необходимость в запросе присоединения.

1 Ответ

6 голосов
/ 30 января 2010

Я не знаю ни одного поля формы для адресов, но вы можете использовать localflavor для проверки ввода и комбо из MultiWidget и MultiValueField для создания поля адреса. Моя выглядит примерно так:

class SplitAddressWidget(forms.MultiWidget):
    def __init__(self, attrs=None):     
        widgets = []
        widgets.append(forms.TextInput(attrs=attrs))
        widgets.append(forms.TextInput(attrs=attrs))
        widgets.append(forms.TextInput(attrs=attrs))
        widgets.append(forms.TextInput(attrs=attrs))
        widgets.append(forms.TextInput(attrs=attrs))
        super(SplitAddressWidget, self).__init__(widgets, attrs)
    ...

class SplitAddressField(forms.MultiValueField):
    widget = SplitAddressWidget
    def __init__(self, *args, **kwargs):
        fields = (
                forms.CharField(required=kwargs['required']),
                forms.CharField(required=0),    
                forms.CharField(required=kwargs['required']),
                USStateField(required=kwargs['required']),
                USZipCodeField(required=kwargs['required']),
            )
        super(SplitAddressField, self).__init__(fields, *args, **kwargs)
    ...

В коде задействовано больше кода, но его здесь немного. Эта информация должна направить вас в правильном направлении.

Примечание. По состоянию на 21 ноября 2013 г. localflavor был перенесен во внешний пакет ( доступен в PyPi ).

...