如何在django中选择框值可以改变?

时间:2014-03-10 13:44:54

标签: javascript jquery django django-views

我有两个选择框1是country,另一个是state。这两个值都可以访问数据库。我选择了国家/地区选择框,然后自动选择与该国家/地区选择框相关的另一个选择框值。

示例:我选择了country india,然后自动获取另一个选择框的值状态。我正在使用ajax获取值。

def constituency1(request):
    country= Loksabha.objects.values('country_name').distinct('country_name')
    terms = Loksabha.objects.values('lok_sabha').distinct('lok_sabha')
    states=Loksabha.objects.values('state_name').distinct('state_name')
    if 'p1' in request.GET and request.GET['p1']:
        p1 = request.GET['p1']
        states=Loksabha.objects.values('state_name').distinct('state_name').filter(country_name='p1')

    if 'p2' in request.GET and request.GET['p2']:
        p2 = request.GET['p2']          
        state_filter = Loksabha.objects.filter(state_name=p1,constituency_name=p2)

2 个答案:

答案 0 :(得分:2)

你需要使用一点点AJAX / JQuery。

#models.py
class Country(models.Model):
     country = models.CharField(max_length=20)

class State(models.Model):
    state = models.Charfield(max_length=20)
    country = models.ForeignKey(state)

#views.py
def filter (request):
    try:
        kwargs = {smart_str('country'): request.GET['q']}
    except KeyError:
        raise Http404
    qs = State.objects.filter(**kwargs).values('pk', 'name')
    response = HttpResponse(
        content=dumps(list(qs)),
        mimetype='application/json'
    )
    return response



#urls.py
urlpatterns = patterns('',
         url(r'^locations/filter/state-by-country/$', 'filter',  name='state_filter')
        ...
)

将此添加到您的模板

//JQuery chained select plugin
$(function() {
  $('#id_state').chainedSelect({
    parent: '#id_country',
    url: 'locations/filter/find-by-country',
    value: 'id',
    label: 'name'
  });
});

答案 1 :(得分:0)

这个问题已被问过好几次了。

这里有一个例子: Conditional field in form

我这样做了: 1)创建js脚本,触发在选择更改时形成GET请求。

2)在视图中,您将request.GET传递给form,而不是request.POST

3)在表单init方法中,您更新第二个字段的可能值 - 请参阅示例。

4)视图再次返回页面,其中第一个选择被设置,第二个选择只有选项,第一个选择允许。