7.27-8.2 JLL实习日志-Ajax +Restful+Api+Variable参数

来源:互联网 发布:虚拟号码发短信软件 编辑:程序博客网 时间:2024/05/16 23:47

实现 的功能 :在 Django 内 使用 ajax 的 方式 调用 Restful Api 去 删选 数据
实现的 主要 流程

  1. template 部分
<script type="text/javascript"> $(document).ready(function () {$('#ab').click(function () { var filter_2 = $("#insert_value").val();//for City  var filter_1 = $("#insert_value_1").val();// for Company type  var filter =  $('#filter').val();//for search     $.ajax({   type: "GET",    //data: {filter:filter, filter_1_value:filter_1,insert_value:insert_value},    url: "https://horizon-retail-20170614-leon-ghibli.c9users.io/restful_api/companyviewset/?format=json",    cache: false,    dataType: "json",     contentType : 'application/json',     success: function (json) {     $('#ajax_search').empty();       showTable(json);        },      error: function () {      alert("false");      }      });    });       });        // create table by cycle function showTable(data){  var dataArray =data;   var len = dataArray.length;   var tableStr = '';  tableStr = '<table id="footable-res2" class="demo" data-filter="#filter" data-filter-text-only="true" data-page-size="20" rules="rows"><thead><tr><th data-toggle="true">{{ ui_setting.Company }}</th><th data-hide="phone">Company Name (Local)</th><th data-hide="phone">Brand(s) </th><th data-hide="phone,tablet">Company Type</th><th> City </th>  <data-hide="phone"> <th>Address</th> <th data-hide="all">  Action </th> </tr></thead>'   tableStr = tableStr+'<tbody data-link="row" id ="ajax_search">' for(var i=0;i<len;i++){   var len_2 = dataArray[i]['Brand'].length;    var arr = []    for(var j=0;j<len_2;j++){      var brand_name =  dataArray[i]['Brand'][j]['Brand_Name']      if (brand_name){        brand_name_sup = '<a href="/brand/view_detail/'+dataArray[i]['Brand'][j]['id']+'/">'+brand_name          arr.push(brand_name_sup);        arr.push('/'); } }   arr_2 = arr.join("");    tableStr = tableStr+"<tr><td>" + '<a href="/company/view_detail/'+dataArray[i].id +'/">'+dataArray[i].Company_Name + "</td>" + "<td>" + dataArray[i].Company_Name_SC + "</td><td>" + arr_2 + "</td><td>" + dataArray[i].Company_Type + "</td>" +"<td>" +dataArray[i].City + "</td>" +"<td>" +dataArray[i].Address + "</td>"+ '<td style="white-space:nowrap;"> <a type="button" href="/company/edit/'+dataArray[i].id+'/" class="btn btn-info"><span class="entypo-pencil"></span>&nbsp;&nbsp;{{ ui_setting.Edit }}</a><a href="/company/delete/'+dataArray[i].Company_Name+'" type="button"  class="btn btn-danger" onclick="javascript: return submit_confirm();"><span class="entypo-trash"></span>&nbsp;&nbsp;{{ ui_setting.Delete }}</a></td>' +"</tr>"            }; tableStr = tableStr+'<tfoot><tr><td colspan="100%"><div class="pagination pagination-centered"></div></td></tr></tfoot></tbody></table>'           $("#footable-res2").html(tableStr);            $(function(){                    $('table.demo').trigger('footable_initialize');              });        }     </script>
  1. Url部分

  2. Restful ViewSet部分

class CompanyViewSet(viewsets.ModelViewSet):    serializer_class = CompanySerializer    filter_backends (django_filters.rest_framework.DjangoFilterBackend,)    def get_queryset(self):# how to define the null and None    filter_1 = self.request.query_params.get('a')#, None)     filter_company_type = self.request.query_params.get('b', None)#   company_type  filter_city_type = self.request.query_params.get('c', None)  Companyqueryset = Company.objects.all()  if filter_1 or filter_company_type or filter_city_type:             for item in Companyqueryset:                if filter_1:                    value_list = [item.Pref_Company_Name_Flg,item.Pref_Company_Name,item.Company_Type,item.Company_Name,item.Country,item.City,item.Address]                    if not views.containsAnyInList(value_list,filter_1):                        Companyqueryset=Companyqueryset.exclude(id=item.id)                if filter_company_type:                    company_type_list = filter_company_type.split(',')                    if not views.containsAnyStringInList(company_type_list,item.Company_Type):                        Companyqueryset=Companyqueryset.exclude(id=item.id)                if filter_city_type:                    city_type_list = filter_city_type.split(',')                    if not views.containsAnyStringInList(city_type_list,item.City):                        Companyqueryset=Companyqueryset.exclude(id=item.id)        return  Companyqueryset
  1. 碰到 的问题
    1. 在 Restful Api 中 如何 实现 ManytoMany模型 的 展现 ,brandcompany是 多对多 的关系 在CompanySerializer 需要 加上 many=True 的关系,但是 怎么 实现 指定 显示 brand下面 的 菜单 呢 ?
class CompanySerializer(serializers.HyperlinkedModelSerializer):    Brand = BrandSerializer(source='brand_set', read_only=True, many=True)    Brand_Name = serializers.ReadOnlyField(source='Brand.Name', read_only=True)     class Meta:        model = Company        #fields = data_export_setting.Company_form_stand        fields = ['id', 'Brand','Brand_Name','Company_Type','Company_Name','Company_Name_SC','IsIndividual','Pref_Client_Name','Pref_Client_Name_Flg','Country','City','Address','Address_SC','Status','Created_On','Created_by','Modified_On','Modified_By']    def create(self, validated_data):        return Company.objects.create(**validated_data)    def update(self, instance, validated_data):        instance.__dict__.update(**validated_data)        instance.save()        return instance        

2.前端js 显示 company 的 Brand.Brand_Name 的方式,最初使用的是Brand.Brand_Name,但是报错,正确的方式是

template already get the Brand object and how to show in the template ? "Brand.BrandName" is wrong!len_2 = dataArray[i]['Brand'].length;var arr = []for(var j=0;j<len_2;j++){var brand_name = dataArray[i]['Brand'][j]['Brand_Name']if (brand_name){brand_name_sup = ''+brand_namearr.push(brand_name_sup);arr.push('/');    }}

3 . 参考地址是这里 ,英语版本

4.没有办法理解实现ajax传参数到ViewSet类中指定的函数 ,文档中可以看到是 默认的函数get_queryset 处理参数 ,如果 参数 是多个的时候 使用self.request.query_params.get 这样的方式进行 得到

原创粉丝点击