• 在 Django Model ViewSet 中实现多对多字段的搜索


    web 开发中,能够高效地进行数据查询是一项基本的需求。对于使用 Django 和 Django Rest Framework (DRF) 的开发者来说,理解如何优雅地在 ViewSets 中实现多对多字段的搜索是一项必备技能。本文将详细探讨这一主题,提供丰富的示例和代码片段以帮助你更好地掌握这一技术。

    初始设置

    考虑以下的模型结构,其中我们有两个基本的模型:Author 和 Book,它们之间存在多对多的关系。

    from django.db import models
    
    class Author(models.Model):
        name = models.CharField(max_length=100)
    
    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author, related_name='books')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Serializer 的配置

    我们需要创建相应的 Serializer 来序列化这些模型。在 serializers.py 文件中:

    from rest_framework import serializers
    from .models import Author, Book
    
    class AuthorSerializer(serializers.ModelSerializer):
        class Meta:
            model = Author
            fields = '__all__'
    
    class BookSerializer(serializers.ModelSerializer):
        authors = AuthorSerializer(many=True, read_only=True)
    
        class Meta:
            model = Book
            fields = '__all__'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ViewSet 的创建

    views.py 文件中,我们创建一个 ViewSet 并添加 SearchFilter 用于实现搜索功能。

    pythonCopy code
    from rest_framework import viewsets, filters
    from .models import Book
    from .serializers import BookSerializer
    
    class BookViewSet(viewsets.ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
        filter_backends = [filters.SearchFilter]
        search_fields = ['title', 'authors__name']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这个配置中,search_fields 属性允许我们定义想要进行搜索的字段。我们可以利用 Django 的双下划线(__)语法来搜索关联模型中的字段。

    路由配置

    接下来,在 urls.py 文件中,我们需要注册 ViewSet。

    from rest_framework.routers import DefaultRouter
    from .views import BookViewSet
    
    router = DefaultRouter()
    router.register(r'books', BookViewSet)
    
    urlpatterns = [
        # ... 其他 URL 配置
        path('', include(router.urls)),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    搜索功能

    现在,通过访问以下 URL,你可以实现对书籍标题和作者名的搜索。

    http://yourdomain.com/books/?search=substring
    
    • 1

    总结

    通过这个详细的教程,我们学习了如何在 Django Model ViewSet 中实现多对多字段的搜索。这不仅增加了你的 Django Rest Framework 的技能,也帮助你更有效地处理复杂的查询需求。希望这篇文章能给你带来帮助,更深入地理解和掌握 Django 和 DRF 的强大功能。

  • 相关阅读:
    关于Transfomer的思考
    【PyTorch深度学习项目实战100例】—— 基于Pytorch的语音情感识别系统 | 第71例
    【SpringBoot】生成二维码、在图片中嵌入二维码
    手把手教小白制作情侣天气推送号 【只需四步】
    在互联网寒冬,我们应届生应如何提高竞争力?
    【C++】标准模板库 STL 简介
    【React组件】github搜索案例之 兄弟组件通信---PubSubJS / fetch
    算法-递归
    安全保障基于软件全生命周期-Istio的授权机制
    WordPress wp-file-manager 文件上传漏洞 CVE-2020-25213
  • 原文地址:https://blog.csdn.net/ken1583096683/article/details/133810388