2010-01-29 36 views
4

在Django模型中表示郵政地址的常見做法是什麼?是否有自定義模型字段的庫,其中包含郵政地址字段並可能處理驗證和格式設置?Django模型中的自定義地址字段

如果沒有圖書館,我該怎麼寫?我可以在django中表示一個複合字段(一個字段可以序列化爲db中的多列)嗎?希望是這消除了加入查詢的需要。

回答

6

我不知道地址的單個表單字段,但是您可以使用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)。

相關問題