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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM