Afin de simplifier l'architecture générale du backend est d'offrir de nombreuses possibilités d'évolutions, un système de tag a été mis en place.
Un `Tag` est une sorte de module Django abstrait qui contient la définition de ses champs (et des contraintes associées) dans son attribut `config`. Les informations saises par les utilisateurs sont alors stockées sous forme de `JSON`.
Les éléments `City`, `University`, `Campus` et `Country` peuvent être associé à n'importe quel tag : cela se passe dans les classes `*****TaggedItem`.
Le tag se configure via un fichier `JSON` qui prend la forme suivante :
```json
{
"nom du champ":{
"type":"????",
"required":bool,
"validators":{
"name_validator_1":...
}
}
```
À ce jour, `type` et `validators` peuvent-être :
- 'text' :
-`max_length` pour contraindre la longueur maximale de la chaine de caractère.
- 'url' :
-`extension` : pour contraindre l'url (il doit se terminer par une extension de la liste)