Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:使用Ajax在模板中获取数据库对象值_Ajax_Django_Jquery - Fatal编程技术网

Django:使用Ajax在模板中获取数据库对象值

Django:使用Ajax在模板中获取数据库对象值,ajax,django,jquery,Ajax,Django,Jquery,我想根据用户选择获取数据库对象。我知道一个可能的解决方案是Ajax,但我不知道如何解决它。代码如下: view.py: def automation(request): //some code car = CAR.objects.get(ida_name='honda') model = car.model_set.all() //some code Select CAR: <select id="car" name="car"> {% for ca

我想根据用户选择获取数据库对象。我知道一个可能的解决方案是Ajax,但我不知道如何解决它。代码如下:

view.py:

def automation(request):
    //some code
    car = CAR.objects.get(ida_name='honda')
    model = car.model_set.all()
    //some code
Select CAR: <select id="car" name="car">
{% for car in car_list %}
<option value="{{ car.id }}" id="{{ car.id }}">{{ car.car_name }}</option>
{% endfor %}
</select>

Select car model: <select id="model" name="model">
{% for model in car.model_set.all %}
<option value="{{ forloop.counter }}">{{ model.model_name }}</option>
{% endfor %}
</select>
template.html:

def automation(request):
    //some code
    car = CAR.objects.get(ida_name='honda')
    model = car.model_set.all()
    //some code
Select CAR: <select id="car" name="car">
{% for car in car_list %}
<option value="{{ car.id }}" id="{{ car.id }}">{{ car.car_name }}</option>
{% endfor %}
</select>

Select car model: <select id="model" name="model">
{% for model in car.model_set.all %}
<option value="{{ forloop.counter }}">{{ model.model_name }}</option>
{% endfor %}
</select>
选择汽车:
{car in car_list%}
{{car.car\u name}
{%endfor%}
选择车型:
{car.model_set.all%中的模型为%
{{model.model_name}
{%endfor%}
在这里,我想从我的模板中传递一个名称,例如“honda”(只要用户在下拉列表中选择它),然后它将获取相应的对象并将结果返回到“model”下拉列表中的我的模板。(因此,基本上,当用户从汽车下拉列表中选择任何汽车时,汽车型号列表将刷新)

注意:模型与models.py中的汽车存在多对多关系


我在这里呆了很长时间,非常感谢您的帮助。

我假设您正在使用AJAX请求

不能直接将查询结果或模型实例作为JSON返回。但是您可以序列化它。这里有一种可能性:

from django.forms.models import model_to_dict
model_to_dict(intance, fields=[], exclude=[])
model_to_dict
采用3个参数:

  • 特定的模型实例
  • 要包括的字段
  • 要排除的字段

  • 参数2和3是可选的。如果不指定字段,该方法将序列化所有字段。要对多个实例(例如查询结果)执行此操作,只需在每个实例的循环中执行此操作。

    您可以使用AJAX调用Django代码并返回汽车名称:

    template.html

    $(document).ready(function () {
        $(document).on("click",'.car_add', function() {
            $car_id = $(this).attr('id')
            $.ajax({
                type: "POST",
                // This is the dictionary you are SENDING to your Django code. 
                // We are sending the 'action':add_car and the 'id: $car_id  
                // which is a variable that contains what car the user selected
                data: { action: "add_car", id: $car_id },
                success: function(data){
                    // This will execute when where Django code returns a dictionary 
                    // called 'data' back to us.
                    $("#car").html("<strong>"+data.car+"</strong>");                
                }
            });
        });
    });
    
    总之,以下是您正在做的事情:

    • 通过Ajax将汽车的“id”发送回Django
    • Django向自己“发布”,意识到这是一个AJAX调用,并调用AJAX函数
    • Django看到操作是“add_car”,并执行if语句
    • Django使用您发送的id查询数据库,返回一辆车
    • Django将该数据作为JSON对象(本例中为字典)发送回页面
    • JQuery使用传递的信息更新页面

    如果你想看一个清晰的例子,请看这个

    你的总结对我了解基本流程非常有帮助。但我并不想知道这辆车的名字。我想从汽车“模型”中获取数据,并在模板上显示模型名称。Model和Car在models.py中是不同的类。我已经更新了上面的问题。谢谢@JcKelley!例如,用户选择“Honda”,然后另一个下拉菜单显示“Accord、Civic等”?然后您只需查询car.models数据库,并将数据发送回字典,就像上面的代码一样。我添加了一个链接,为您的问题提供了一个清晰的示例。非常感谢!这个链接真的很有用!经过几次试用,我终于得到了我想要的!