我有一个Django表单,显示用户所在的国家/地区/州/省/地区。在此表单中,我以ChoiceField形式显示所有国家/地区' country'使用我从列表中预先填充的Select小部件。如果用户居住在美国或加拿大,我将创建另一种形式ChoiceField,名为“' region'它也使用Select小部件,我使用美国州或加拿大省份列表预先填充。这些字段中任何一个的表单标签是" State"或"省"分别。如果用户来自任何其他国家/地区,我使用TextInput小部件将区域字段表示为CharField,并允许他们在此字段中输入区域名称。它的标签是"州/省/地区"。当用户第一次访问此页面时,我知道他们所在的国家/地区,因此我会适当地预填充国家和地区字段。这是我的要求,但我不确定如何在Django中实现它们。
以下是我的文件:
# models.py
class Profile(models.Model):
region = models.CharField(max_length=30, null=True, blank=True)
country = models.ForeignKey('Country')
# forms.py
class BusinessProfileForm(forms.Form):
country = forms.ChoiceField(
choices = COUNTRIES,
widget = forms.Select())
class USBusinessProfileForm(BusinessProfileForm):
region = forms.ChoiceField(
choices = US_STATES,
widget = forms.Select())
class CABusinessProfileForm(BusinessProfileForm):
region = forms.ChoiceField(
choices = CA_PROVINCES,
widget = forms.Select())
class OtherBusinessProfileForm(BusinessProfileForm):
region = forms.CharField(
required = False,
widget = forms.TextInput())
# choices.py
COUNTRIES = [
('US', _('United States')),
('GB', _('United Kingdom')),
('CA', _('Canada')),
...]
US_STATES = [
('AL', _('Alabama')),
('AK', _('Alaska')),
...]
CA_PROVINCES = [
('AB', _('Alberta')),
('BC', _('British Columbia')),
...]
有谁能帮我理解如何在Django中解决这个问题?我不知道如何绕过它。看起来很复杂。只是大声思考,似乎我必须将某种点击事件分配给国家/地区控件。当它触发时,我会读取所选择的新国家/地区,如果它是我跟踪的某个国家/地区之一,请将带外请求发回某些事物"在服务器上将返回适当的列表。然后我会用列表重新填充控件并更改控件的标签。如果该国家不是我追踪其区域的国家,我将该控件重新创建为CharField并更改标签。如果用户从一个国家/地区切换到另一个我不跟踪的国家(例如从墨西哥到哥斯达黎加),我什么都不做。
答案 0 :(得分:0)
你不会在纯Django中解决这个问题,因为Django是一个服务器应用程序,需要一些客户端代码来实现你想要的。
幸运的是,你的目标相当普遍,因此有很多教程展示了如何做你想做的事情。 Here is an example(忽略PHP部分)。如果您对jQuery,AngularJS等客户端库/框架一无所知,甚至不了解Javascript本身,那么这是一个让您入门的好方法。