我有一个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)
下面是一个过滤示例
Change.objects.get(_changeset=hex(ctx.node()))
这是django开发人员推荐的方法,但是我真的很难接受这样一个事实:仅仅存储20个字节是很难看的。
也许我是个纯粹主义者,但理想情况下我能写
Change.objects.get(changeset=ctx.node())
属性允许我编写:
change.changeset = ctx.node()
所以这是我能要求的。
“我有一个20字节的十六进制哈希值,希望存储在django模型中。”
Django这样做。它们使用十六进制摘要,从技术上讲,它是字符串。不是字节。
不要使用
someHash.digest()
——您会得到字节,但无法轻松存储。使用
someHash.hexdigest()
——得到一个字符串,可以很容易地存储它。编辑--代码几乎相同。
见http://docs.python.org/library/hashlib.html
我假设如果你在写原始SQL,你会使用Postgres bytea或MySQL VARBINARY。有一个ticket with a patch(标记为“需要测试”)据称生成了这样一个字段(Ticket 2417:支持二进制类型字段(也就是postgres中的bytea和mysql中的VARBINARY))。
否则,你可以试着写一个custom field type。
您还可以编写自己的自定义Model Manager,为您执行转义和不转义操作。
相关问题 更多 >
编程相关推荐