一種選擇是使用Geopy查找某人(如Yahoo或Google Maps)的地址,然後該地址將返回與其匹配的地址的完整地址。您可能需要注意退回地址中的公寓號碼被截斷(例如「221 Amsterdam Av#330」變成「221 AMSTERDAM AVENUE」)。此外,您還將獲得用戶可能縮寫或拼寫錯誤的城市/州/國家/地區信息。
如果存在多個匹配項,您可以提示用戶詢問他們的地址是哪個。在沒有匹配的情況下,您可以讓用戶知道,並且可能允許保存地址,具體取決於有效地址的重要性以及您對地址查找提供程序的有效性的信任程度。
至於這樣做歸一化的形式與模式,我不知道是什麼做的事情的首選Django的方法是,但我的偏好是在形式,例如:
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...')
你可能的情況下,扔在這個模型中查找函數(或一些helpers.py文件)你想重新使用它在其他領域
對於哪個國家/地區? – payne 2011-01-29 18:44:29
對不起:美國。特別是紐約市。 – 2011-01-30 00:04:09