Una opción sería utilizar Geopy para buscar la dirección en alguien como Yahoo o Google Maps, que luego devolverá la dirección completa de la (s) persona (s) con la que coinciden. Es posible que tenga que vigilar para ver si los números de apartamento se truncan en la dirección devuelta (por ejemplo, "221 Amsterdam Av # 330" que se convierte en "221 AMSTERDAM AVENUE"). Además, también obtendrá la información de la ciudad/estado/país, que el usuario también puede haber abreviado o mal escrito.
En el caso de que haya múltiples coincidencias, puede solicitar al usuario retroalimentación sobre cuál es su dirección. En el caso de que no haya coincidencias, también puede informar al usuario, y posiblemente permitir que la dirección se guarde de todos modos, dependiendo de la importancia de una dirección válida y de la confianza que deposite en la validez de los proveedores de búsqueda de direcciones.
En cuanto a la normalización de hacer esto en forma comparación con el modelo, no sé lo que el Django-forma preferida de hacer las cosas es, pero mi preferencia es en la forma, por ejemplo:
def clean(self):
# check address via some self-defined helper function
matches = my_helper_address_matcher(address, city, state, zip)
if not matches:
raise forms.ValidationError("Your address couldn't be found...")
elif len(matches) > 1:
# add javascript into error so the user can select
# the address that matches? maybe there is a cleaner way to do this
raise forms.ValidationError('Did you mean...')
Usted podría lanzar esta función de búsqueda en el modelo (o algún archivo helpers.py) en caso de que quiera volver a utilizarlo en otras áreas
¿Para qué país/países? – payne
Lo siento: EE. UU. Específicamente NYC. –