J'essaie de modéliser un champ MySQL VARBINARY
dans Django v1.1.1. Le champ binaire stocke une représentation hexadécimale de données (on utiliserait INSERT INTO test(bin_val) VALUES X'4D7953514C'
)Django: Comment modéliser un champ MySQL VARBINARY HEX?
lecture de la documentation Django [1] Je suis venu avec cette sollution:
class MyTest(models.Model):
bin_val = BinValField()
class BinValField(models.Field):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
""" DB -> Python """
return ''.join('%X%X' % ((ord(byte)>>4) & 0xF, ord(byte) & 0xF) for byte in value)
def get_db_prep_value(self, value):
""" Python -> DB """
return a2b_hex(value).decode('latin1')
Toutefois, cela ne fonctionne pas correctement parce que:
- Django fait une transformation Unicode des données binaires de MySQL
- Lors de l'enregistrement d'un nouvel objet MyTest, le
get_db_prep_value()
est appelé deux fois (je pense que cela est un bug dans Django?)
La question est de savoir comment modéliser un tel champ?
PS: associés à ce problème est ce ticket [2] qui est encore ouvert au bout de 3 ans :(
[1] Django: écriture des champs de modèle personnalisés
[2] http://code.djangoproject.com/ticket/2417
Quelle est la question réelle ici? – Mez
La question est de savoir comment modéliser un tel champ correctement dans Django? –