欢迎访问宙启技术站
智能推送

使用django_filters.rest_framework实现数据过滤和搜索功能的步骤是什么

发布时间:2024-01-09 07:43:33

使用django_filters.rest_framework实现数据过滤和搜索功能的步骤如下:

1. 安装django_filters和djangorestframework,在requirements.txt文件中添加以下依赖:

django_filters
djangorestframework

2. 在Django的settings.py文件中,注册'django_filters'和'rest_framework'应用:

INSTALLED_APPS = [
    ...
    'django_filters',
    'rest_framework',
]

3. 创建一个简单的模型类,作为示例:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)

4. 创建一个过滤器类,在filters.py文件中:

import django_filters

from .models import Book

class BookFilter(django_filters.FilterSet):
    title = django_filters.CharFilter(lookup_expr='icontains')
    author = django_filters.CharFilter(lookup_expr='icontains')
    publication_date = django_filters.DateFromToRangeFilter()

    class Meta:
        model = Book
        fields = ['title', 'author', 'publication_date']

5. 在views.py文件中,使用过滤器类定义APIView:

from rest_framework import generics
from .models import Book
from .filters import BookFilter
from .serializers import BookSerializer

class BookListAPIView(generics.ListAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filterset_class = BookFilter

6. 创建一个序列化类,在serializers.py文件中:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['title', 'author', 'publication_date', 'price']

7. 在urls.py文件中,添加一个URL配置:

from django.urls import path
from .views import BookListAPIView

urlpatterns = [
    path('books/', BookListAPIView.as_view(), name='book_list'),
]

以上步骤完成后,即可使用如下方式进行数据过滤和搜索:

- 按title字段进行搜索:

http://localhost:8000/books/?title=python

- 按author字段进行搜索:

http://localhost:8000/books/?author=John%20Doe

- 按publication_date字段范围进行过滤:

http://localhost:8000/books/?publication_date_min=2021-01-01&publication_date_max=2021-12-31

- 可以同时使用多个条件进行过滤和搜索:

http://localhost:8000/books/?title=python&author=John%20Doe&publication_date_min=2021-01-01&publication_date_max=2021-12-31

这样就可以使用django_filters.rest_framework实现数据过滤和搜索功能了。