python - 在 Django Rest Framework 中验证 query_params

标签 python django rest django-rest-framework

我只想在给定 query_params 时返回 model_info,否则它应该给出一些错误消息。

我尝试了下面的代码,但是当名称未在查询参数中传递时,它给我 keyerror 。

from rest_framework.validators import ValidationError

class ModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = ModelName
        fields = ('name', 'abbreviation')

    def validate_name(self, value):
        if value:
            return value
        else:
            raise ValidationError('Enter name')



class ModelNameListList(generics.ListCreateAPIView):
    renderer_classes = (JSONRenderer, )
    serializer_class = ModelSerializer

    def get_queryset(self):
        queryset = ModelName.objects.all()
        name = self.request.query_params['name']
        queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
        return queryset

我不能使用 get 方法,因为我也在使用分页,如果我使用 get 方法,它将返回所有结果。

当我在 get_queryset 中使用以下代码时,我得到的响应对象没有长度

   def get_queryset(self):
        queryset = ModelName.objects.all()
        name = self.request.query_params.get('name', None)
        if name:
            queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
        else:
            content = {'errors': 'name is missing'}
            return Response(content)
        return queryset

最佳答案

有了这个功能:

  def get_queryset(self):
        queryset = ModelName.objects.all()
        name = self.request.query_params.get('name', None)
        if name:
            queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
        else:
            raise exceptions.ParseError("name not supplied")
        return queryset

你应该确保你总是返回一个查询集(或者如果这是你想要处理它的方式则引发异常)。

关于python - 在 Django Rest Framework 中验证 query_params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668157/

相关文章:

python - 更改 __hash__ 的类仍然适用于字典访问

python - 删除器中的事件链

python - Django ORM获取各自的选择值而不是字段值

python - 使用 flask-restful RequestParser 进行嵌套验证

rest - $skiptoken 不会使用 Sharepoint API 跳过并返回下一组记录

python - 如何使用另一个 numpy 数组修改 pandas 数据框中的所有值

python - 如何从 ndarray 集合中删除与其中一个数组的零元素相对应的列?

node.js - 通过 REST 进行 native Kubeless 调用

python - Django 表单和在 View /页面之间传递数据

django - 在 django 中实现多电子邮件系统的最简洁方法?