我认为您需要为此进行某种 ajax 查找。例如,只要有人输入邮政编码,javascript(我建议使用 jquery)就会被设置为执行 ajax 请求。或许如果邮政编码文本框长度为 6,那么 onChange 事件将请求 URL“/ajax/get_region/60604/”,该 URL 将映射到下面的视图并传入邮政编码。该视图可能会返回一个 json 响应,该响应将指示该邮政编码的区域。最后,在 javascript 回调函数中可以更新您网站上的对话框以指示区域。
我的建议是该区域甚至不需要回传到网络服务器……这里的 ajax 查找仅用于显示目的,然后在 POST 期间再次计算。但是,话又说回来,我不知道您是否希望用户能够手动输入区域和邮政编码。
视图.py
import json
from django.http import HttpResponse
def ajax_region_from_zip(request, zip):
# do your logic to lookup the zipcode from the region
region, lookup_success = get_region_form_zip(zip)
response = Response(content_type='application/json')
response.write(json.dumps({"success":lookup_success, "region":region ))
return response
最后,如果您确实希望用户能够在表单中编辑区域和邮政编码,您需要确保区域和邮政编码始终保持一致,并且您可能希望在用户的表单中构建一个检查提交。此外,如果用户禁用了 javascript,如果用户选择了错误的区域,您将需要向用户提供错误信息。您可以覆盖表单上的 clean() 方法,该方法也会从邮政编码中查找区域。如果它与前端表单发布的区域不匹配,它将返回错误消息。
表格.py
class AddressForm(forms.ModelForm):
....
....
def clean(self):
cleaned_data = self.cleaned_data
zip = cleaned_data.get('zip', None)
region = cleaned_data.get('region', None)
region_lookup, lookup_success = get_region_form_zip(zip)
if not region == region_lookup:
forms.ValidationError("This zipcode is not in the given region.")
return cleaned_data
请注意,这些代码示例尚未经过测试,但希望能够理解。
希望这可以帮助,
乔