forked from erp-dev/erp
fix: query param of api_man
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user