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