drf之接口、高级定制字段、多表关联

简单添加图书五个接口

在视图类中

from rest_framework.views import APIView
from app01.models import Book
from .serializer import BookSerializer
from rest_framework.response import Response


class BookView(APIView):
    def get(self, request):
        book = Book.objects.all()
        ser = BookSerializer(instance=book, many=True)
        return Response(ser.data)

    def post(self, request):
        ser = BookSerializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({
   'code': 100, 'msg': '保存成功', 'data': ser.data})
        else:
            return Response({
   'code': 101, 'msg': ser.errors})


class BookDetailView(APIView):
    def put(self, request, pk):
        book = Book.objects.filter(pk=pk).first()
        ser = BookSerializer(instance=book, data=request.data)
		# 如果instance为空就会进入craete
        if ser.is_valid():
            ser.save()
            return Response({
   'code': 100, 'msg': '修改成功', 'data': ser.data})
        else:
            return Response({
   'code': 101, 'msg': ser.errors})

    def delete(self, request, pk):
        Book.objects.filter(pk=pk).delete()
        return Response({
   'code': 100, 'msg': 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django REST framework 中,可以使用 `django_filters` 库提供的 `CharFilter` 进行多个字段的模糊查询。示例如下: 假设有一个 `Book` 模型类,其中包含 `title` 和 `author` 两个字段,现在要查询标题或作者中包含 "Python" 的书籍: ```python from django_filters import rest_framework as filters class BookFilter(filters.FilterSet): search = filters.CharFilter(method="filter_search") class Meta: model = Book fields = ["search"] def filter_search(self, queryset, name, value): return queryset.filter(Q(title__icontains=value) | Q(author__icontains=value)) ``` 以上代码中,定义了一个名为 `search` 的过滤器字段,并指定了一个名为 `filter_search` 的方法来实现模糊查询。在 `filter_search` 方法中,使用 `Q` 对象和 `|` 运算符将两个模糊查询条件进行了 OR 运算,并返回了一个包含标题或作者中包含 "Python" 的书籍的查询集。 在视图中使用过滤器类进行查询: ```python class BookListAPIView(ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [filters.DjangoFilterBackend] filterset_class = BookFilter ``` 以上代码中,指定了 `filterset_class` 属性为上面定义的 `BookFilter` 类,并将 `filter_backends` 属性设置为 `DjangoFilterBackend`,以启用过滤器功能。 最后,可以通过在 URL 中传递 `search` 参数来进行模糊查询: ``` http://example.com/api/books?search=Python ``` 以上 URL 将返回包含标题或作者中包含 "Python" 的书籍的查询集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值