• django model ValueQuerySet QuerySet 转换成JSON


    这里我有4个字段需要使用外键,那么在调取数据的时候就可以使用两个'_'进行调取,当然条件必须需要从前端传进来

    models.py

    复制代码
    class HostInfo(models.Model):
        host_ip = models.GenericIPAddressField()
        usage = models.ForeignKey('ServiceLine')
        sysversion = models.ForeignKey('SystemVersion')
        sysuser = models.ForeignKey('SystemUser')
        proposer = models.CharField(max_length=20)
        dataversion = models.ForeignKey('DataBaseVersion')
        tomversion = models.ForeignKey('TomcatVersion')
    复制代码

    调用的时候需要了解的是:1、使用values进行调用返回的是valueQuerySet字段,而浊QuerySet,所以先转成list然后再使用json.dumps转成json
                2、使用filter进行调用返回在是QuerySet对象,那么就可以直接使用serializers.serialize() 方法转化为json

    复制代码
    def search(request):
        keyword = request.GET.get('keyword', None)
        if keyword:
            obj = models.HostInfo.objects.filter(host_ip=keyword).values('host_ip',
                                                                         'usage__serviceline',
                                                                         'sysversion__systemversion',
                                                                         'sysuser__systemuser',
                                                                         'dataversion__databaseversion',
                                                                         'tomversion__tomcatversion',
                                                                         'proposer',
                                                                         'id'
                                                                         )
            # obj = models.HostInfo.objects.filter(host_ip=keyword)
            # data = serializers.serialize('json', obj)
            data = json.dumps(list(obj))
        return HttpResponse(data)
    复制代码

    前端在拿到json对象后就可以使用字符串或者遍历的方式进行前端的显示

    复制代码
    <script>
            $("#search_btn").click(function () {
                $.ajax({
                   url:'/cmdb/search',
                   type:'GET',
                   data:$("#search_input").serialize(),
                    dataType:'json',
                    success: function (response,stutas,xhr) {
                        $('#tb').empty();
                        $.each(response, function (i, item) {
                            var vfields = item;  //这里不定义也行,在下面的调用中直接使用item,请忽略我不规范的缩进
                            $("tbody").append("<tr>"
                            + "<td>" + i + "</td>"
                            + "<td>" + vfields.host_ip +"</td>"
                            + "<td>" + vfields.usage__serviceline + "</td>"
                            + "<td>" + vfields.sysversion__systemversion + "</td>"
                            + "<td>" + vfields.sysuser__systemuser + "</td>"
                            + "<td>" + vfields.proposer + "</td>"
                            + "<td>" + vfields.dataversion__databaseversion + "</td>"
                            + "<td>" + vfields.tomversion__tomcatversion + "</td>"
                            + "<td>" + "<a " + "href='/cmdb/edit-" + vfields.id + "'>编辑</a>" + "|" + "<a href='/cmdb/delete-" + vfields.id + "'>删除</a>" + "</td>"
                            + "</tr>");
                        })
                    }
                });
            });
        </script>
    复制代码
    https://www.cnblogs.com/baylorqu/p/7909892.html
  • 相关阅读:
    MQTT 协议快速体验
    vue学习之动态绑定样式
    vue学习之过滤器Filters
    ES6学习之async和await
    vue学习之组件命名
    vue学习之props验证
    vue学习之vite
    使用less
    Js学习之ES6模块化
    webpack通俗易懂入门篇
  • 原文地址:https://www.cnblogs.com/hedianzhan/p/9613306.html
Copyright © 2020-2023  润新知