django-vue-admin/dvadmin-backend/apps/vadmin/celery/serializers.py

42 lines
1.4 KiB
Python

from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
from rest_framework import serializers
from ..op_drf.serializers import CustomModelSerializer
from ..utils.exceptions import APIException
class IntervalScheduleSerializer(CustomModelSerializer):
class Meta:
model = IntervalSchedule
fields = '__all__'
class CrontabScheduleSerializer(CustomModelSerializer):
def save(self, **kwargs):
queryset = CrontabSchedule.objects.filter(**self.validated_data)
if queryset.count() and (
queryset.count() == 1 and self.initial_data.get('id', None) not in queryset.values_list('id',
flat=True)):
raise APIException(message='值已存在!!!')
super().save(**kwargs)
class Meta:
model = CrontabSchedule
exclude = ('timezone',)
class PeriodicTaskSerializer(CustomModelSerializer):
interval_list = serializers.SerializerMethodField(read_only=True)
crontab_list = serializers.SerializerMethodField(read_only=True)
def get_interval_list(self, obj):
return IntervalScheduleSerializer(obj.interval).data if obj.interval else {}
def get_crontab_list(self, obj):
return CrontabScheduleSerializer(obj.crontab).data if obj.crontab else {}
class Meta:
model = PeriodicTask
fields = '__all__'