42 lines
1.4 KiB
Python
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__'
|