Django - 如果country field等于美国发送ajax请求将状态选择器设置为美国州的元组

时间:2012-04-26 18:41:27

标签: javascript jquery ajax django forms

在我的django表单中,我想制作某种类型的ajax / jquery请求,这样如果用户选择“United States”作为其国家/地区,则state字段会自动变为具有所有状态的下拉列表(选项= 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}

1 个答案:

答案 0 :(得分:0)

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