这里我有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>