Django的DRF框架使用
表结构
class PurchaseSortList(models.Model):
date = models.DateField(default=timezone.now, blank=True)
component = models.CharField(max_length=255, default="", blank=True)
supplier = models.CharField(max_length=255, default="", blank=True)
work_group = models.CharField(max_length=255, default="", blank=True)
description = models.CharField(max_length=255, default="", blank=True)
cost = models.DecimalField(max_digits=10, decimal_places=2, blank=True)
stock_level = models.IntegerField()
过滤器/分页器
class PurchaseSortListFilter(filters.FilterSet):
component = filters.CharFilter(lookup_expr='icontains')
supplier = filters.CharFilter(lookup_expr='icontains')
work_group = filters.CharFilter(lookup_expr='exact')
description = filters.CharFilter(lookup_expr='icontains')
stock_level = filters.NumberFilter()
class Meta:
model = PurchaseSortList
fields = ["component", "supplier", "work_group", "description", "cost", "stock_level"]
class CustomPageNumberPagination(PageNumberPagination):
page_query_param = 'page_num' # 默认是 'page'
page_size_query_param = 'page_size' # 默认是 'page_size'
max_page_size = 100 # 可根据需要调整
视图类
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
class PurchaseSortListViewSet(
GenericViewSet,
RetrieveModelMixin,
ListModelMixin,
UpdateModelMixin,
CreateModelMixin,
DestroyModelMixin
):
queryset = PurchaseSortList.objects.all()
serializer_class = PurchaseSortListSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
filterset_class = PurchaseSortListFilter
pagination_class = CustomPageNumberPagination
ordering_fields = ['date', 'stock_level', 'cost']
ordering = ['-id'] # 默认排序字段
请求示例
http://127.0.0.1:8001/api/purchase_sort_list/?page_size=10&page_num=1&ordering=
