2010-01-29 9 views
4

Quelle est la pratique courante pour représenter les adresses postales dans les modèles Django? Existe-t-il une bibliothèque pour les champs de modèles personnalisés comprenant des champs d'adresse postale et pouvant gérer la validation et le formatage?Champ d'adresse personnalisé dans le modèle Django

Si aucune bibliothèque n'existe, comment puis-je en écrire une? Puis-je représenter un champ composite (un champ qui est sérialisé à plusieurs colonnes dans db) dans django? L'espoir est que cela élimine le besoin d'avoir une requête de jointure.

Répondre

6

Je ne connais pas un seul champ de formulaire pour les adresses, mais vous pouvez utiliser localflavor pour valider l'entrée et un combo de MultiWidget et MultiValueField pour créer un champ d'adresse. Le mien ressemble à quelque chose comme ceci:

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

Il y a plus de code en jeu, mais il est un peu beaucoup à coller ici. Cette information devrait vous conduire dans la bonne direction. Remarque: depuis le 21 novembre 2013, localflavor a été déplacé vers un package externe (available on PyPi).

Questions connexes