1
0
forked from erp-dev/erp

feat: product quick api and param create api

This commit is contained in:
2025-11-19 09:03:15 +08:00
parent 2efd11c019
commit 7f822b0064
20 changed files with 2284 additions and 42 deletions

View File

@@ -0,0 +1,53 @@
"""
Products API Views
快速产品查询接口,用于前端下拉框和自动完成
"""
from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.pagination import LimitOffsetPagination
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
from basic_info.models import Product
class ProductQuickViewSet(viewsets.GenericViewSet):
"""
产品快速查询接口
专门为前端下拉框和自动完成提供的轻量级接口
只返回 id 和 name支持分页和模糊搜索
"""
queryset = Product.objects.all()
permission_classes = [IsAuthenticated]
pagination_class = LimitOffsetPagination
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
search_fields = ['name']
def list(self, request, *args, **kwargs):
"""
获取产品列表(仅 id 和 name
查询参数:
- limit: 返回结果数量,默认无限制
- offset: 偏移量默认0
- search: 按名称模糊搜索
示例:
- GET /api/v1/products/quick/?limit=10&offset=0
- GET /api/v1/products/quick/?search=布料
"""
queryset = self.filter_queryset(self.get_queryset())
# 分页
page = self.paginate_queryset(queryset)
if page is not None:
data = [{'id': p.id, 'name': p.name} for p in page]
return self.get_paginated_response(data)
# 不分页(如果没有 limit 参数)
data = [{'id': p.id, 'name': p.name} for p in queryset]
return Response({
'count': len(data),
'results': data
})