Sommaire

Écrire vos propres types de champs

Si dans Django vous ne trouvez pas votre bonheur avec les types de champs prédéfinis (CharField, etc.), vous pouvez écrire vos propres types de champs.

Pourquoi faire cela ? D’une part Django ne couvre que les types les plus courants d’une base de données : entiers, chaînes ou flottants. Ainsi on peut avoir besoin d’écrire le gestionnaire d’un type de champ dans le cas d’un type très spécifique d’une base de données particulière, par exemple des coordonnées géographiques, des objets géométriques, etc. D’autre part, on peut également avoir des champs qui représentent des objets Python complexes dont on souhaite pouvoir gérer de manière fine leur représentation dans la base de données.

Un exemple simple pour gérer un champ de type BLOB (Binary Large Object) dans MySQL, dont nous verrons les différentes options plus en détail dans ce chapitre :

DATABASE_ENGINE = ’django.db.backends.mysql’  
   
class BlobField(models.Field):  
     __metaclass__ = models.SubfieldBase  
   
     def db_type(self):  
         if DATABASE_ENGINE == ’django.db.backends.mysql’:   
             return ’LONGBLOB’  
         elif DATABASE_ENGINE == 
’django.db.backends.postgresql_psycopg2’: ...