Django - 如果国家/地区字段等于美国,则发送 ajax 请求以将状态选择器设置为美国各州的元组

Posted

技术标签:

【中文标题】Django - 如果国家/地区字段等于美国,则发送 ajax 请求以将状态选择器设置为美国各州的元组【英文标题】:Django - If country field equals United States send ajax request to set state selector to a tuple of US states 【发布时间】:2012-05-07 12:59:58 【问题描述】:

在我的 django 表单中,我想发出某种类型的 ajax/jquery 请求,这样如果用户选择“美国”作为他们的国家,状态字段会自动变成包含所有状态的下拉列表(选择 = STATE_CHOICES )。我怎样才能在 Django 中做到这一点?我在搜索结果中看到了 DAJAX,但我很犹豫,因为我觉得应该有一个非常简单的方法来做到这一点。提前致谢。

更新:

能够使用 ajax 完成其中的一些工作。当用户失去对国家字段的关注时,它将该字段中的数据发送到相应的视图。

    //JQUERY CODE
$("#id_country").focusout(function()
    
        var country = $(this).attr('value');

        $.ajax(
            type:'POST',
            URL: '/accounts/register/',
            data: 
                country: $(this).attr('value')                    
            
            );

    );`  

这是它被发送到的视图。它从不承认这是一个 ajax 调用。除非用户当然提交表单,否则它总是属于 else 语句。

from django.contrib.localflavor.us.us_states import STATE_CHOICES

def register(request):
form = RegistrationForm()
form_pref = UserInfoForm(request.POST)

if request.method == 'POST':
    form = RegistrationForm(request.POST)     
    if form.is_valid():   
        form_pref = UserInfoForm(request.POST, instance=UserInfo())            
        if form_pref.is_valid():
            new_user = form.save()                
            user=UserInfo.objects.create(user_id=new_user.id)            
            form_pref = UserInfoForm(request.POST, instance = user)  
            form_pref.save()   
    if form_pref.is_valid():
        form_pref.save(commit=False)

if request.is_ajax():
   ajax= "AJAX"
   country = request.POST.get('choices')  
    # I tested out in the shell and this line below changed the choices for me           
   form_pref.fields['state_province']._set_choices(STATE_CHOICES)   

else:

    form = RegistrationForm()
    form_pref = UserInfoForm()       
    country = "test"
 forms = (form, form_pref)

return render_to_response('register_form.html', 'form':form,'form_pref': form_pref,'forms':forms, 'ajax':ajax, 'country':country

【问题讨论】:

为什么需要额外的 AJAX 调用来检索此信息?这应该只在客户端完成。 为了利用美国各州的当地风味,添加 STATE_CHOICES,它允许我调用状态选择元组,而无需自己静态输入状态信息。你的权利,我可以在客户端做这一切,但如果我可以使用 django 为我做这件事似乎很浪费。这当然取决于我需要多长时间才能弄清楚:)。 $(this).attr('value') 不好。请改用$(this).val() 我认为他的建议是你应该在页面上已经有状态的下拉列表但隐藏(由 Django 本地风味生成)。然后,当他们选择美国作为国家/地区时,您取消隐藏下拉菜单。实现相同目标的开销要少得多。总体而言,可能是显示州信息的更好设计。询问您是否有关于如何做到这一点的问题。 您确定在您的 ajax 请求中有 HTTP_X_REQUESTED_WITH 标头吗?您的 javascript 库版本可能未设置它。用浏览器的调试工具测试一下。请查看文档:docs.djangoproject.com/en/dev/ref/request-response/… 【参考方案1】:

您正在为该 AJAX 调用调用 post 方法... request.is_ajax() 应该是 if...else 语句内的 if request.method == "POST" 语句。

【讨论】:

以上是关于Django - 如果国家/地区字段等于美国,则发送 ajax 请求以将状态选择器设置为美国各州的元组的主要内容,如果未能解决你的问题,请参考以下文章

如何根据符合特定条件的国家/地区代码重定向URL

如何根据所选国家/地区在 MVC3 中为美国或加拿大邮政编码验证编写自定义验证器?

Magento:为国家/地区 magento 设置默认商店视图

如何为用户提供的国名预测正确的国名?

Django:国家下拉列表?

无法摆脱重复值[重复]