1
0
forked from erp-dev/erp

feat: added search support fields for plate order query api

This commit is contained in:
2025-12-31 21:55:43 +08:00
parent 88046acf4f
commit 3dc7560434
2 changed files with 103 additions and 2 deletions

View File

@@ -580,6 +580,94 @@ class PlateOrderAPITestCase(TestCase):
self.assertEqual(len(response.data), 1)
self.assertIn('花朵', response.data[0]['style_name'])
def test_search_by_plate_notes(self):
"""测试按打版注意事项搜索"""
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN001',
plate_notes='注意颜色偏差控制在5%以内',
)
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN002',
plate_notes='普通要求',
)
response = self.client.get('/api/v1/plate-orders/?search=颜色偏差')
self.assertEqual(response.status_code, status.HTTP_200_OK)
if isinstance(response.data, dict):
self.assertEqual(response.data['count'], 1)
self.assertIn('颜色偏差', response.data['results'][0]['plate_notes'])
else:
self.assertEqual(len(response.data), 1)
self.assertIn('颜色偏差', response.data[0]['plate_notes'])
def test_search_by_reprint_reason(self):
"""测试按复版原因搜索"""
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN001',
reprint_reason='客户要求更换底色为深蓝',
)
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN002',
reprint_reason='正常复版',
)
response = self.client.get('/api/v1/plate-orders/?search=深蓝')
self.assertEqual(response.status_code, status.HTTP_200_OK)
if isinstance(response.data, dict):
self.assertEqual(response.data['count'], 1)
self.assertIn('深蓝', response.data['results'][0]['reprint_reason'])
else:
self.assertEqual(len(response.data), 1)
self.assertIn('深蓝', response.data[0]['reprint_reason'])
def test_search_by_image_name(self):
"""测试按图片名称搜索"""
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN001',
image_name='夏季新款碎花图案',
)
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN002',
image_name='冬季格纹',
)
response = self.client.get('/api/v1/plate-orders/?search=碎花')
self.assertEqual(response.status_code, status.HTTP_200_OK)
if isinstance(response.data, dict):
self.assertEqual(response.data['count'], 1)
self.assertIn('碎花', response.data['results'][0]['image_name'])
else:
self.assertEqual(len(response.data), 1)
self.assertIn('碎花', response.data[0]['image_name'])
def test_search_by_default_address(self):
"""测试按默认地址搜索"""
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN001',
default_address='广东省深圳市南山区科技园',
)
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN002',
default_address='浙江省杭州市西湖区',
)
response = self.client.get('/api/v1/plate-orders/?search=南山区')
self.assertEqual(response.status_code, status.HTTP_200_OK)
if isinstance(response.data, dict):
self.assertEqual(response.data['count'], 1)
self.assertIn('南山区', response.data['results'][0]['default_address'])
else:
self.assertEqual(len(response.data), 1)
self.assertIn('南山区', response.data[0]['default_address'])
def test_ordering_by_created_at(self):
"""测试按创建时间排序"""
order1 = printing_models.PlateOrder.objects.create(

View File

@@ -657,8 +657,21 @@ class PlateOrderViewSet(LimitedModelViewSet):
parser_classes = [MultiPartParser, FormParser, JSONParser] # 支持文件上传
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filterset_class = PlateOrderFilterSet
# design_code_normalized: 当 design_code 为空时用 id 兜底,便于搜索数字编号
search_fields = ['design_code', 'design_code_normalized', 'style_name', 'customer__name', 'fabric']
# search_fields 说明(模糊搜索支持的字段):
# - design_code: 设计编号
# - design_code_normalized: 设计编号兜底(为空时使用主键 ID通过 get_queryset 注解)
# - style_name: 款号名称
# - customer__name: 客户名称(跨表)
# - fabric: 布料
# - plate_notes: 打版注意事项
# - reprint_reason: 复版原因
# - image_name: 图片名称
# - default_address: 默认地址
# 待添加area, customer_feedback, fabric_source, width 等
search_fields = [
'design_code', 'design_code_normalized', 'style_name', 'customer__name', 'fabric',
'plate_notes', 'reprint_reason', 'image_name', 'default_address',
]
ordering_fields = [
'id', 'created_at', 'updated_at', 'plate_date',
'required_completion_date', 'completion_date',