在Django模型字段中存储二进制哈希值

mba*_*hau 8 python django encoding django-models binary-data

我有一个20字节的十六进制哈希,我想存储在django模型中.如果我使用文本字段,它将被解释为unicode并且它会返回乱码.

目前我正在编码并对其进行解码,这真的使代码混乱,因为我必须能够通过它进行过滤.

def get_changeset(self):
    return bin(self._changeset)

def set_changeset(self, value):
    self._changeset = hex(value)

changeset = property(get_changeset, set_changeset)
Run Code Online (Sandbox Code Playgroud)

这是一个过滤的例子

Change.objects.get(_changeset=hex(ctx.node()))
Run Code Online (Sandbox Code Playgroud)

这是django开发人员推荐的方法,但我真的很难接受这样一个事实,就是存储20个字节就是这个丑陋的事实.

也许我太过纯粹主义者了,但理想情况下我能够写作

Change.objects.get(changeset=ctx.node())
Run Code Online (Sandbox Code Playgroud)

这些属性允许我写:

change.changeset = ctx.node()
Run Code Online (Sandbox Code Playgroud)

这就像我可以问的那样好.

Yon*_*lan 3

我假设如果您编写原始 SQL,您将使用 Postgres bytea 或 MySQL VARBINARY。有一个带有补丁的票证(标记为“需要测试”),据称可以创建这样的字段(票证 2417:支持二进制类型字段(又名:postgres 中的 bytea 和 mysql 中的 VARBINARY))。

否则,您可能可以尝试编写自定义字段类型

  • 注意,尽管这个答案已经有四年了,BinaryField 并不在 Django (1.5) 的最新版本中,而是在当前的开发版本中。 (2认同)