def validate(self, attr): action = self.context['request'].parser_context['view'].action if action != 'partial_update': if not check_if_translated_field('name', attr): raise serializers.ValidationError( {'name': _("This field is required.")}) return super(PackageSerializer, self).validate(attr)
def validate(self, attr): err = {} if not check_if_translated_field('name', attr): err.update(getMessageTranslate('name', attr, True)) if err: raise serializers.ValidationError(err) return super(RetreatSerializer, self).validate(attr)
def validate(self, attrs): """Prevents overlapping active periods and invalid start/end date""" if not check_if_translated_field('name', attrs): raise serializers.ValidationError( {'name': _("This field is required.")}) # Forbid Period full updates if users have reserved timeslots action = self.context['view'].action if action == 'update' or action == 'partial_update': reservations = TimeSlot.objects.filter( period=self.instance).exclude(users=None).count() if reservations: raise serializers.ValidationError( _("The period contains timeslots with user reservations."), ) # Get instance values of start_date, end_date and is_active if not # provided in request data (needed for validation). start = attrs.get('start_date', getattr(self.instance, 'start_date', None)) end = attrs.get('end_date', getattr(self.instance, 'end_date', None)) is_active = attrs.get('is_active', getattr(self.instance, 'is_active', None)) if start >= end: raise serializers.ValidationError({ 'end_date': [_("End date must be later than start_date.")], 'start_date': [_("Start date must be earlier than end_date.")], }) # If creating/updating an active period, make sure that it does not # overlap with another active period if is_active: instance_id = getattr(self.instance, 'id', None) workplace = attrs.get('workplace', getattr(self.instance, 'workplace', None)) # Get other active periods aasociated to the same workplace workplace_periods = Period.objects.filter( workplace=workplace, is_active=True, ) # Exclude current period (for updates) workplace_periods = workplace_periods.exclude(id=instance_id) # Keep start_date & end_date for validation # This creates a list of tuple: [(start_date, end_date), ...] date_list = workplace_periods.values_list('start_date', 'end_date') for duration in date_list: if max(duration[0], start) < min(duration[1], end): raise serializers.ValidationError( _("An active period associated to the same " "workplace overlaps with the provided start_date " "and end_date."), ) return attrs
def validate(self, attr): err = {} if attr.get('type', Retreat.TYPE_PHYSICAL) == Retreat.TYPE_PHYSICAL: required_attrs = [ 'accessibility', 'postal_code', 'has_shared_rooms' ] for key in required_attrs: if attr.get(key, None) is None: err.update( { key: _("This field is required.") } ) if not check_if_translated_field('name', attr): err.update(getMessageTranslate('name', attr, True)) if not check_if_translated_field('details', attr): err.update(getMessageTranslate('details', attr, True)) if not check_if_translated_field('country', attr): err.update(getMessageTranslate('country', attr, True)) if not check_if_translated_field('state_province', attr): err.update(getMessageTranslate('state_province', attr, True)) if not check_if_translated_field('city', attr): err.update(getMessageTranslate('city', attr, True)) if not check_if_translated_field('address_line1', attr): err.update(getMessageTranslate('address_line1', attr, True)) if err: raise serializers.ValidationError(err) return super(RetreatSerializer, self).validate(attr)
def validate(self, attr): err = {} if not check_if_translated_field('name', attr): err['name'] = _("This field is required.") if not check_if_translated_field('details', attr): err['details'] = _("This field is required.") if not check_if_translated_field('country', attr): err['country'] = _("This field is required.") if not check_if_translated_field('state_province', attr): err['state_province'] = _("This field is required.") if not check_if_translated_field('city', attr): err['city'] = _("This field is required.") if not check_if_translated_field('address_line1', attr): err['address_line1'] = _("This field is required.") if not check_if_translated_field('timezone', attr): err['timezone'] = _("This field is required.") if not check_if_translated_field('postal_code', attr): err['postal_code'] = _("This field is required.") if not check_if_translated_field('seats', attr): err['seats'] = _("This field is required.") if err: raise serializers.ValidationError(err) return super(WorkplaceSerializer, self).validate(attr)
def validate(self, attr): err = {} if not check_if_translated_field('name', attr): err['name'] = _("This field is required.") if not check_if_translated_field('details', attr): err['details'] = _("This field is required.") if not check_if_translated_field('country', attr): err['country'] = _("This field is required.") if not check_if_translated_field('state_province', attr): err['state_province'] = _("This field is required.") if not check_if_translated_field('city', attr): err['city'] = _("This field is required.") if not check_if_translated_field('address_line1', attr): err['address_line1'] = _("This field is required.") if not check_if_translated_field('timezone', attr): err['timezone'] = _("This field is required.") if not check_if_translated_field('postal_code', attr): err['postal_code'] = _("This field is required.") if not check_if_translated_field('seats', attr): err['seats'] = _("This field is required.") if not check_if_translated_field('price', attr): err['price'] = _("This field is required.") if not check_if_translated_field('start_time', attr): err['start_time'] = _("This field is required.") if not check_if_translated_field('end_time', attr): err['end_time'] = _("This field is required.") if not check_if_translated_field('min_day_refund', attr): err['min_day_refund'] = _("This field is required.") if not check_if_translated_field('refund_rate', attr): err['refund_rate'] = _("This field is required.") if not check_if_translated_field('min_day_exchange', attr): err['min_day_exchange'] = _("This field is required.") if not check_if_translated_field('is_active', attr): err['is_active'] = _("This field is required.") if not check_if_translated_field('accessibility', attr): err['accessibility'] = _("This field is required.") if err: raise serializers.ValidationError(err) return super(RetirementSerializer, self).validate(attr)
def validate(self, attr): if not check_if_translated_field('name', attr): raise serializers.ValidationError( getMessageTranslate('name', attr, True)) return super(BaseProductSerializer, self).validate(attr)