55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
from rest_framework import serializers
|
|
from django.conf import settings
|
|
from django_filters.rest_framework import FilterSet, CharFilter
|
|
|
|
from dvadmin.utils.serializers import CustomModelSerializer
|
|
from dvadmin.utils.viewset import CustomModelViewSet
|
|
from dvadmin.system.models import DownloadCenter
|
|
|
|
|
|
class DownloadCenterSerializer(CustomModelSerializer):
|
|
url = serializers.SerializerMethodField(read_only=True)
|
|
|
|
def get_url(self, instance):
|
|
if self.request.query_params.get('prefix'):
|
|
if settings.ENVIRONMENT in ['local']:
|
|
prefix = 'http://127.0.0.1:8000'
|
|
elif settings.ENVIRONMENT in ['test']:
|
|
prefix = 'http://{host}/api'.format(host=self.request.get_host())
|
|
else:
|
|
prefix = 'https://{host}/api'.format(host=self.request.get_host())
|
|
return (f'{prefix}/media/{str(instance.url)}')
|
|
return f'media/{str(instance.url)}'
|
|
|
|
class Meta:
|
|
model = DownloadCenter
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class DownloadCenterFilterSet(FilterSet):
|
|
task_name = CharFilter(field_name='task_name', lookup_expr='icontains')
|
|
file_name = CharFilter(field_name='file_name', lookup_expr='icontains')
|
|
|
|
class Meta:
|
|
model = DownloadCenter
|
|
fields = ['task_status', 'task_name', 'file_name']
|
|
|
|
|
|
class DownloadCenterViewSet(CustomModelViewSet):
|
|
queryset = DownloadCenter.objects.all()
|
|
serializer_class = DownloadCenterSerializer
|
|
filter_class = DownloadCenterFilterSet
|
|
permission_classes = []
|
|
extra_filter_class = []
|
|
|
|
def get_queryset(self):
|
|
# 判断是否是 Swagger 文档生成阶段,防止报错
|
|
if getattr(self, 'swagger_fake_view', False):
|
|
return self.queryset.model.objects.none()
|
|
|
|
# 正常请求下的逻辑
|
|
if self.request.user.is_superuser:
|
|
return super().get_queryset()
|
|
return super().get_queryset().filter(creator=self.request.user)
|