1
0
forked from erp-dev/erp

fix: query param of api_man

This commit is contained in:
2025-12-09 16:34:46 +08:00
parent d61a644d92
commit 4188bae0fc
12 changed files with 181 additions and 5 deletions

View File

@@ -67,6 +67,12 @@ class ProductSerializer(BaseSerializer):
- 如果有图片:返回完整 URL七牛云 CDN 地址)
- 如果没有图片:返回 None
"""
primary_url_resolver = getattr(obj, 'get_primary_image_url', None)
if callable(primary_url_resolver):
resolved = primary_url_resolver()
if resolved:
return resolved
if obj.image:
request = self.context.get('request')
if request:

View File

@@ -2,6 +2,8 @@ from rest_framework import viewsets
from rest_framework.exceptions import PermissionDenied
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions
from rest_framework.decorators import action
from rest_framework.response import Response
from django_filters.rest_framework import DjangoFilterBackend
from django_filters import rest_framework as dj_filters
@@ -68,11 +70,18 @@ class BasicInfoFilterMixin:
def filter_queryset(self, queryset):
field = self._detect_filter_field()
model = getattr(getattr(self, 'queryset', None), 'model', None)
if not field or not model:
return super().filter_queryset(queryset)
if field and model:
self.filterset_class = self._build_filterset_class(model, field)
self.filterset_class = self._build_filterset_class(model, field)
return super().filter_queryset(queryset)
qs = super().filter_queryset(queryset)
# 统一按创建时间倒序排序(如果模型存在 created_at 字段)
model = getattr(qs, 'model', model)
if model:
field_names = {f.name for f in model._meta.get_fields() if hasattr(f, 'name')}
if 'created_at' in field_names:
return qs.order_by('-created_at')
return qs
class BaseViewSet(BasicInfoFilterMixin, viewsets.ModelViewSet):
@@ -106,6 +115,11 @@ class QuickInputViewSet(BasicInfoFilterMixin, viewsets.ModelViewSet):
qs = qs.filter(group=group)
return qs
@action(detail=False, methods=['get'], url_path='groups')
def groups(self, request):
groups = serializers.basic_models.QuickInput.objects.values_list('group', flat=True).distinct()
return Response(groups)
class ProductViewSet(BaseViewSet):
queryset = serializers.basic_models.Product.objects