The boy, 14, allegedly punched Zascia Hakkesteeg, 41, head of the department of educational training at Jim Fouche Primary School in Brixton, after she asked him to remove a jersey which was not part of the school uniform.
The police were called and the boy was taken to the Brixton police station, where a charge of assault was laid.
Police spokesperson Warrant Officer Gordon Billings said the boy was taken home by his mother on Tuesday afternoon.
Gauteng department of education spokesperson Gershwin Chuenyane said the boy had been suspended for seven days, pending a formal disciplinary hearing.