forked from erp-dev/erp
feat: added search support fields for plate order query api
This commit is contained in:
@@ -579,6 +579,94 @@ class PlateOrderAPITestCase(TestCase):
|
||||
else:
|
||||
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):
|
||||
"""测试按创建时间排序"""
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user