【问题标题】:How can I use filter option in django rest framework using function based view如何使用基于函数的视图在 django rest 框架中使用过滤器选项
【发布时间】:2020-01-22 19:02:18
【问题描述】:

这是我的模型:

  class Customer(models.Model):
       name   = models.CharField(max_length=250) 
       age    = models.IntegerField()
       status = models.IntegerField()

序列化器是:

 class CustomerSerializer(serializers.Serializer):

       class Meta:
            model  = Customer
            fields = '__all__'

我想使用带有年龄和状态的 Customer 模型的过滤器选项,这将使用 POST 方法以 json 格式(不在 url 中)传递。如何实现过滤器选项?我在这里使用基于函数的视图。

 {
      "age": 20,
      "status": 2
 }

如果我发送了这个 json,那么它将过滤掉 Customer 模型。

【问题讨论】:

  • 拜托,你能显示序列化程序和视图集吗?
  • 来吧,请写你的序列化器并查看类

标签: django filter django-rest-framework


【解决方案1】:

你可以使用simplejson来反序列化数据,因为它看起来像一个简单的json。

from django.utils import simplejson data = simplejson.loads(request.POST['data'])

然后你可以通过data.key访问数据字典的值。

您现在可以使用链式过滤器来获取结果。

【讨论】:

    【解决方案2】:

    试试这个。 如果您的帖子来自正文表单数据。

    from django.db.models import Q
            age = self.request.POST.get('age')
            status = self.request.POST.get("status")
            q_objects = Q()
            if age:
                q_objects.add(Q(age=age), Q.AND)
            if status:
                q_objects.add(Q(status=status), Q.AND)
            if q_objects:
                queryset = Customer.objects.filter(q_objects)
            else:
                queryset = Customer.objects.all()
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 2020-04-12
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2014-02-17
      相关资源
      最近更新 更多