我正在尝试VARBINARY
在 Django v1.1.1 中为 MySQL 字段建模。二进制字段存储数据的十六进制表示(即使用INSERT INTO test(bin_val) VALUES X'4D7953514C'
)
阅读 Django 文档[1] 我想出了这个解决方案:
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')
但是,这不能正常工作,因为:
- Django 对 MySQL 中的二进制数据进行 Unicode 转换
- 保存新的 MyTest 对象时,
get_db_prep_value()
会调用两次(我认为这是 Django 中的错误?)
问题是你将如何为这样一个领域建模?
PS:与这个问题相关的是这张票[2] 3年后仍然打开:(
[1] Django:编写自定义模型字段