Django Javascript下拉列表

2024-10-01 17:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和javascript编程的新手,我已经学习python几个月了它。还有我一直在玩django,这是很酷的,我想知道如何使这个模型与一个javascript.ill像有些解释一样多的代码涉及我只是有一个完整的了解从什么过程django到javascript。在

我想动态地CarModel.objects.filter(make='somename')或只是'somename'

这是一个测试模型,因为它类似于我在在线教程(youtube)中使用的javascript,脚本如下所示

class Make(models.Model):
    name  = models.CharField(max_length=50,blank=True,null = True)
    #so so so so

class CarModel(models.Model):
    name  = models.CharField(max_length=50,blank=True,null = True)
    make = models.ForeignKey(Make,blank=True,null = True)

现在你要怎么把这样的话传给你的java脚本呢

^{pr2}$

这里是html

Choose Car Make:
    <select id="slct1" name="slct1" onchange="populate(this.id,'slct2')">
          <option value=""></option>
          <option value="Chevy">Chevy</option>
          <option value="Dodge">Dodge</option>
          <option value="Ford">Ford</option>
    </select>

   Choose Car Model:
  <select id="slct2" name="slct2"></select>

Tags: djangonameidtruemakemodelsovalue
3条回答

在使用之前,应将查询集转换为列表json.dumps文件否则,它将给您一个错误“NOT JSON SERIALIZABLE”

from <your-app>.models import Make
from <your-app>.models import Model
import json

json_dict = {}
for car_make in Make.objects.all():
    json_dict[car_make] = list(Model.objects.filter(make=car_make).value())
json_data = json.dumps(json_dict)

如果你想在JS里做,这就是我解决问题的方法。在

首先为2个选择列表创建一个包含以下内容的模板。在

<html>
<head>
<script>
var json = {
    "Chevy": ["chev1", "chev2", "chev3"],
    "Dodge": ["dodge1", "dodge2", "dodge3"],
    "Ford": ["ford1", "ford2", "ford3"]
};

function carMake () {
    select = document.getElementById('slct1');
    select.options.length = 0;
    for(make in json) {
        select.options[select.options.length] = new Option(make, make);
    }
}

function carModel(sel) {
    var car_make = sel.options[sel.selectedIndex].value
    select = document.getElementById('slct2');
    select.options.length = 0;
    for(var i=0;i<json[car_make].length;i++) {
        select.options[select.options.length] = new Option(json[car_make][i], i);
    }
}
</script>
</head>

<body>
Choose Car Make:
<select id="slct1" onchange="carModel(this)"></select>
<script> carMake(); </script>

Choose Car Model:
<select id="slct2" name="slct2"></select>
</body>
</html>

当动态填充的Car Model select字段发生更改时,上面的JS将读入JSON对象并更新Car Make。在

要使用提供的模型生成JSON对象,需要执行以下操作:

在视图.py文件:

^{2}$

然后使用json_data并将其添加到响应呈现上下文中。在

最后修改上面的模板,以便JS变量json将被呈现为包含从视图传递到模板的json对象。在

你不需要javascript来做一些漂亮的下拉列表。您可以使用Django表单为您完成。你只需要提供表单.py一些关于用户可以做出的选择的信息,您可以在不需要做更多操作的情况下呈现表单。在

看看我的forms.py看看我是怎么做到的。在

相关问题 更多 >

    热门问题