从Django 1.7中的select标签获取POST值

时间:2015-10-10 17:46:14

标签: javascript python ajax django drop-down-menu

在我的forms.py中我有

class CollegeForm(forms.ModelForm):
    collegeName = forms.ModelChoiceField(label='Select College', queryset=College.objects.all(), widget=forms.Select(attrs={'class': 'form-control'}))

    class Meta:
        model = College
        fields = ('collegeName',)

在我的views.py中,

if(request.method =='POST'):
    college_form = CollegeForm(request.POST)
else:
    college_form = CollegeForm()
return render(request, 'market/product_list.html',{'college_form': college_form})

在我的product_list.html文件中,我有

<div class="col-md-4">
    {{ college_form.as_p }}
</div>

我想根据用户从下拉列表中选择的内容动态更新页面内容。有没有办法通过进行Ajax调用?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

简短的回答是肯定的。但这在很大程度上取决于你想要做的事情。

  1. 根据您要更改的页面数量以及以何种方式更改...您可能不需要ajax调用..您可以在初始请求中发送数据并使用javascript更新页面具体方式。

  2. 如果每个选项都有大量数据,那么每次进行新选择时,您都可以采用非常简单的方式进行页面加载。 (这里的用户体验有点笨拙,但它可以有效)。

  3. 最后,如果您有大量数据并希望获得光滑的体验,则可以使用a。您需要有一个端点,根据选择为您提供必要的数据。如果你走这条路线我推荐使用像jquery这样的javascript框架。以下是ajax call

  4. 的文档

    以下是ajax解决方案的示例。这只是一个大纲,假设您正在使用ajax。还有一些细节将取决于具体实施:

    您的新views.py:

    jquery

    对product_list.html的更改:

    import json
    
    from django.shortcuts import render
    from django.http import HttpResponse
    
    from forms import CollegeForm
    from models import CollegeInfo
    
    
    def original_endpoint(request):
        # ...
        if request.method == 'POST':
            college_form = CollegeForm(request.POST)
        else:
            college_form = CollegeForm()
        return render(request, 'market/product_list.html', {'college_form': college_form})
    
    
    def college_data_endpoint(request, college_name):
        """
        Endpoint for sending back college-specific data
    
        Response sent back in json format to make for easier processing with javascript
        """
    
        # Get college-specific data from the db
        college = CollegeInfo.objects.get(id=college_name)
    
        # format it
        response_data = {
            'field1': college.field1,
            'field2': college.field2
        }
    
        return HttpResponse(json.dumps(response_data), content_type='application/json')