【问题标题】:In Django ,ajax to send the variable by Restful Api在 Django 中,ajax 通过 Restful Api 发送变量
【发布时间】:2018-01-06 11:31:12
【问题描述】:

我是Restful的菜鸟,我想通过“GET”向视图集发送一些变量以响应一些过滤数据现在我已经完成了一些部分,我可以获取所有数据,但我不明白如何将变量发送到视图集中的特定函数以响应一些过滤数据,例如我创建了一个名为“get_ajax_variable()”的新函数,我如何将变量发送到 具体功能? 提前欣赏!

这是我的序列化器

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



    });

【问题讨论】:

    标签: ajax django rest


    【解决方案1】:

    既然是 GET,为什么不将它们作为 url 参数发送?

    【讨论】:

    【解决方案2】:

    我应该以评论的形式回复,但我没有足够的权限这样做。所以请多多包涵。

    鉴于您在问题中输入的代码和标签,我假设您正在使用 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

    在该视图/视图集中,对于 POST,您的数据应该在 request.data 中,在 GET 中,通常在 query.params 中,但这实际上取决于您如何构造 ajax 调用。

    了解 POST 和 GET 之间的区别很重要。你可以简单地谷歌它。

    HTH。

    【讨论】:

      【解决方案3】:

      是的!我已经解决了这个问题,以下是我的步骤 最重要的一步是覆盖 Viewset 类中的函数get_queryset(self): 模板中的ajax如下:

         <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_FRAMEWORKas

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

      在 Django 的 Url 中,你应该按如下方式设置 url:

      router.register(r'companysearch',CompanyViewSet)
      

      在viewset中,我没有拉取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)
         ....
      

      那么你就可以正确得到结果了,感谢任何帮助的人

      【讨论】:

        猜你喜欢
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 1970-01-01
        • 2014-01-30
        • 2015-01-26
        • 2017-04-20
        • 2018-09-29
        相关资源
        最近更新 更多