Jedną opcją jest użycie Geopy do wyszukania adresu na kimś takim jak Yahoo lub Google Maps, który zwróci pełny adres tych, z którymi są one zgodne. Być może będziesz musiał uważać na obcięcie numerów mieszkań w zwróconym adresie (np. "221 Amsterdam Av # 330" staje się "221 AMSTERDAM AVENUE"). Ponadto otrzymasz również informacje o mieście/stanie/kraju, które użytkownik mógł również skrócić lub wprowadzić błędnie.
W przypadku wielu dopasowań można poprosić użytkownika o opinię na temat jego adresu. W przypadku braku dopasowań, możesz również poinformować użytkownika i ewentualnie zezwolić na zapisanie adresu w każdym razie, w zależności od tego, jak ważny jest poprawny adres i jak wiele zaufania przypisujesz do ważności dostawcy wyszukiwania adresu.
Odnośnie robi to normalizację w postaci vs. modelu, nie wiem co preferowanym Django sposób robienia rzeczy jest, ale moje preferencje jest w postaci, na przykład:
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...')
Ty mogłyby rzucić tę funkcję odnośnika w modelu (lub jakiś plik helpers.py) w przypadku, gdy chcesz używać go w innych dziedzinach
Dla jakiego kraju/krajów? – payne
Przepraszamy: USA. W szczególności NYC. –