2017-07-31 47 views
0

我是Restful中的一名新手,我想發送一些變量給視圖以通過「GET」響應一些過濾數據現在我完成了一些部分,我可以獲得所有的數據,但我不知道如何發送變量到視圖中的特定函數來響應某些過濾數據,例如我創建了一個名爲「get_ajax_variable()」的新函數,我怎樣才能發送變量到 具體功能? 提前預訂!在Django中,通過Restful Api發送變量的ajax

這是我的串行

class CompanySerializer(serializers.HyperlinkedModelSerializer): 
    Brand = serializers.ReadOnlyField(source='brand_set.all', read_only=True) 

    class Meta: 
     model = Company 
     fields = data_export_setting.Company_form_stand 

    def create(self, validated_data): 
     validated_data['owner'] = self.context['request'].user 
     return Company.objects.create(**validated_data) 

這是我的視圖集中

class CompanyViewSet(viewsets.ModelViewSet): 
    queryset = Company.objects.all() 
    serializer_class = CompanySerializer 

這是我的AJAX, 「showTable(JSON)」 的功能是重裝我company.html功能

<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-sam-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"); 
       } 
      }); 
     }); 



    }); 

回答

0

是的!我有解決這個問題,以下是我一步 最重要的一步是在模板覆蓋功能get_queryset(self):在類視圖集中 的,阿賈克斯如下:

<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:"You_own_url"+format=json&a="+filter+"&b="+filter_1+"&c="+filter_2, 
       cache: false, 
       dataType: "json", 
       contentType : 'application/json', 
       success: function (json) { 
       $('#ajax_search').empty(); 
        showTable(json); 
        }, 
       error: function() { 
        alert("false"); 
       } 
      }); 
     }); 
在Django的設置

,你應該設置REST_FRAMEWORK

'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',), 

在Django的URL,你應該設置網址如下:

router.register(r'companysearch',CompanyViewSet) 

在視圖集,我沒拉get_queryset的所有功能,你應該設置如下:

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) 
    .... 

那麼你就可以得到正確的結果,感謝的人誰幫助

0

因爲它是一個GET,你爲什麼不把它們作爲URL參數發送?

+0

你這樣是什麼意思? 「url:」https://horizo​​n-retail-sam-leon-ghibli.c9users.io/restful_api/companyviewset??format=json"&a=filter_2&b = filter_1&c = filter「 –

0

我應該回復作爲評論,但我沒有足夠的特權來做到這一點。所以請耐心等待。

我假設你在使用Django Rest Framework(DRF)時給出了代碼和標籤。

基本上,這個url: "https://horizon-retail-sam-leon-ghibli.c9users.io/restful_api/companyviewset/?format=json",允許你發送一個請求和數據到你的REST API服務器,在你的設置中它是DRF。並且django中的urls.py瞭解您發送的值並將您指向某個視圖/視圖集,例如您的示例中的CompanyViewSet。

關於視圖/視圖如何與串行器一起工作,您可以看看http://www.django-rest-framework.org/api-guide/serializers/http://www.django-rest-framework.org/tutorial/1-serialization/。這應該就足夠了。我不確定數據如何從視圖/視圖集傳輸到序列化程序。如果有人能解釋,這將是非常好的。但在你的序列化程序中,你的數據應該在validated_data

在該視圖/ viewset中,您的數據應該位於request.data的POST和GET中,通常位於query.params,但這實際上取決於您如何構建ajax調用。

知道POST和GET之間的區別很重要。你可以簡單地谷歌它。

HTH。

+0

Thanks〜我從你的學習中學到了很多評論〜謝謝 –