2009-07-26 11 views
5

¿Cuál es la mejor manera de poner en práctica lo siguiente:Trabajar con Django LocalFlavor postal como un modelo de campo

### models.py 
>>> from django.db import models 
>>> from django.contrib.auth.models import User 
# Create the client class. 
>>> class Client(models.Model): 
...  user = models.OntToOneField(User) 
...  zip = ***???***() 

### forms.py 
>>> from django.forms import ModelForm 
# Create the form class. 
>>> class ArticleForm(ModelForm): 
...  class Meta: 
...   model = Client 

Estoy intentando conseguir el resultado final de utilizar el US Zip Codes Field form widget/validator utilizando sólo modificaciones del archivo models.py. aka .. no quiero hacer lo siguiente:

### forms.py 
>>> from django.forms import ModelForm 
>>> from django.contrib.localflavor.us.forms import USZipCodeField 
# Create the form class. 
>>> class ArticleForm(ModelForm): 
...  class Meta: 
...   model = Client 
...  zip = USZipCodeField() 

NOTA: podría ser que la mejor manera de lograr que se encuentra en el archivo forms.py como se muestra arriba ... Si este es el caso , Creo que me falta el argumento/beneficio de tenerlo allí en lugar de como un campo de modelo personalizado (por ejemplo, DRY? acoplamiento flojo?) Cualquier ayuda para ayudar a comprender mejor los beneficios de forms.py sobre models.py en este escenario sería muy apreciada.

¡Gracias de antemano! -Tom

Respuesta

5

Un código postal es solo una cadena de números/letras, por lo que no es necesario definir un campo personalizado para almacenarlo en la base de datos. No hay validación a nivel de modelo en Django en este momento (aunque hay un proyecto Google Summer of Code para agregarlo), por lo que un campo de modelo personalizado no agregaría nada. La validación viene en el nivel de formulario, por lo que hay un campo de formulario personalizado.

0

Esto no debe haber estado disponible cuando se hizo la pregunta, pero Django 1.4 tiene django.contrib.localflavor.us.models.USPostalCodeField(), lo que se podría pensar que haría lo que necesita, pero está diseñado para almacenar esas abreviaturas de los estados de 2 letras, no en códigos postales, Desafortunadamente.

Cuestiones relacionadas