【问题标题】:Custom address field in Django ModelDjango 模型中的自定义地址字段
【发布时间】:2010-01-29 21:22:54
【问题描述】:

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

如果不存在库,我该如何编写一个?我可以在 django 中表示一个复合字段(一个在 db 中被序列化为多个列的字段)吗?希望这消除了加入查询的需要。

【问题讨论】:

    标签: python django django-models field


    【解决方案1】:

    我不知道用于地址的单个表单字段,但您可以使用 localflavor 来验证输入,并使用 MultiWidgetMultiValueField 的组合来创建地址字段。我的看起来像这样:

    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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2012-12-11
      • 2015-04-16
      • 2022-01-24
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多