def validate(self, data): ''' Data validation :param data: data from post/put request :return: clean data ''' # move fields from orgExtra to data and rename fieldname from camelCase # to underscore for key, value in data['orgExtra'].items(): data[re.sub('([A-Z]+)', r'_\1', key).lower()] = value try: course_org, course_id, course_run = Exam.get_course_data( data['course_id']) except ValueError as e: raise serializers.ValidationError("Wrong courseId data") data['course_organization'] = course_org data['course_identify'] = "/".join((course_org, course_id)) data['course_run'] = "/".join((course_org, course_id, course_run)) data['exam_end_date'] = parser.parse(data['exam_end_date']) data['exam_start_date'] = parser.parse(data['exam_start_date']) del (data['orgExtra']) try: Exam(**data).full_clean() except ValidationError as e: raise serializers.ValidationError(e.message_dict) return super(ExamSerializer, self).validate(data)