代码之家  ›  专栏  ›  技术社区  ›  notnoop

Django模型中的自定义地址字段

  •  4
  • notnoop  · 技术社区  · 15 年前

    在django模型中,代表邮政地址的常见做法是什么?是否有包含邮政地址字段的自定义模型字段的库,并可能处理验证和格式设置?

    如果没有图书馆,我怎么写?我可以在django中表示一个复合字段(在db中序列化为多列的字段)吗?希望这样就不需要进行连接查询了。

    1 回复  |  直到 11 年前
        1
  •  6
  •   MariuszS    11 年前

    我不知道地址只有一个表单域,但您可以使用 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)
        ...
    

    涉及到更多的代码,但这里要粘贴的代码有点多。这个信息应该能让你朝正确的方向前进。

    注:截至2013年11月21日,LocalFlavor已被转移到外部包装中。( available on PyPi )。