from django.db import models from backend.models.module import BasicModule, BasicModuleSerializer from backend.models.university import University from rest_framework import serializers, viewsets, permissions def check_nones(val1, val2): if val1 is None and val2 is not None: raise serializers.ValidationError("Check your dates") if val2 is None and val1 is not None: raise serializers.ValidationError("Check your dates") return val1 is None and val2 is None class UniversitySemestersDates(BasicModule): university = models.OneToOneField( University, on_delete=models.CASCADE, related_name='university_semesters_dates', primary_key=True, null=False) spring_begin = models.DateField(null=True, blank=True) spring_end = models.DateField(null=True, blank=True) autumn_begin = models.DateField(null=True, blank=True) autumn_end = models.DateField(null=True, blank=True) # Need custom validation # TODO add tests def clean(self, *args, **kwargs): spring_ok = check_nones(self.spring_begin, self.spring_end) autumn_ok = check_nones(self.autumn_begin, self.autumn_end) if not spring_ok: spring_ok = self.spring_begin < self.spring_end if not autumn_ok: autumn_ok = self.autumn_begin < self.autumn_end # no check if spring_end < autumn_begin in case info is not available if not (spring_ok and autumn_ok): print("ici") raise serializers.ValidationError("Check your dates !") super(UniversitySemestersDates, self).clean(*args, **kwargs) def save(self, *args, **kwargs): self.full_clean() super(UniversitySemestersDates, self).save(*args, **kwargs) class UniversitySemestersDatesSerializer(BasicModuleSerializer): class Meta: model = UniversitySemestersDates fields = '__all__' class UniversitySemestersDatesViewSet(viewsets.ModelViewSet): # TODO switch to dict permission_classes = (permissions.DjangoModelPermissions,) queryset = UniversitySemestersDates.objects.all() # pylint: disable=E1101 serializer_class = UniversitySemestersDatesSerializer