【问题标题】:populate a select box from a another select box and using database connection从另一个选择框填充选择框并使用数据库连接
【发布时间】:2012-08-07 08:51:38
【问题描述】:

我有两个选择框:一个是国家,另一个是城市。 当用户选择一个国家/地区时,该国家/地区的相应城市应填充到数据库中的“城市”中。

我是 jquery 和 javascript 的新手,我不知道如何实现这一点。如果有人给我一个执行此功能的示例代码,我们将不胜感激。我不知道,因为我是脚本语言的新手,所以我几乎被困住了。

我在 django 框架中的一种形式中使用它,该框架是用 python 实现的。

提前谢谢你

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <select name="country" id="country">
    <option value = "india">india</option>
    <option value = "USA">USA</option>
    <option value = "UK">UK</option>
    <option value = "China">China</option>
    <option value = "Sweden">Sweden</option>
    <option value = "Germany">Germany</option>
  </select>

  <select name="cities" id="cities">
  <option value = ""></option>
  </select>  
  <div></div>  

</body>
</html>

【问题讨论】:

  • 我已经尝试过一些基本功能,并且我能够获得所选元素选择框“国家/地区”的值,但我不确定下一步该做什么。 $('#country').change(function() { var value = $(this).attr('value'); alert(value); });
  • 每个国家会有很多城市吗?我要问的原因是,可能值得在服务器上缓存城市列表并将其返回到视图并使用 Javascript 填充选择框,而不是一直点击数据库。
  • @Mikael :实际上我需要使用数据库,因为我将使用上述逻辑实现另一个复杂的场景。在这种情况下,还会有两个列表框,日期和时间,当您选择日期时,购买时间应动态显示在时间选择框中,然后使用上述两个值执行附加操作,并且 i不应刷新页面或提交表单。
  • 好的,所以在更改函数中,您可以对返回给定国家/地区城市的视图进行 AJAX 调用。
  • 一个有用的选项可以是 django smart_select 应用程序,它在另一个基础上填充一个下拉列表。并且易于使用,请参阅github.com/digi604/django-smart-selects

标签: javascript jquery python django


【解决方案1】:

试试这个:

在您的模板中

 $('#country').change(function() { 
    var value = $(this).attr('value'); 
    var request = $.ajax({
        url: "/getcities/",
        type: "GET",
        data: {country : value},
        dataType: "json",

        success: function(data) {
         //Popluate combo here by unpacking the json
        }
    });


});

在你看来:

def getcities(request)
    if request.method == "GET":
        country = request.GET["country"]
        cities = Cities.objects.filter(country=country)
        results = [{'city': str(city.name), 'id':city.id} for city in cities]
        json = simplejson.dumps(results)
        return HttpResponse(json, mimetype='application/json')

您必须将 url /getcities/ 映射到 urls.py 中的视图。

【讨论】:

  • 嗨,我正在尝试在我的代码中实现这个逻辑,感谢你我理解了这个逻辑。我在通过 url 调用视图时遇到了一些麻烦。换句话说,我已经在 urls.py 中定义了它并且还实现了视图,但是视图没有被调用。我不明白它没有被调用的原因
  • 您使用的是哪个版本的 Django?也尝试更改为 GET 而不是 POST。我已经更新了我的答案以反映这一点
  • 使用 Firebug 查看代码调用的路径。它可能有问题。
  • 实际上,当我更改获取方法时,视图被调用。但由于某种原因,request.GET 无法接收来自 ajax 调用的请求
  • 我使用 getlist() 函数通过 GET 获得了值,它可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多