我正在尝试使用自定义unicode方法对CharField进行子类化。基本上,我希望能够对默认模型字段返回的值调用我的自定义加密方法。我尝试了以下内容,但似乎管理员正在以其他方式获取值。在我看来,这将是实现这一目标的最pythonic方式,但也许我错了。
def PasswordCharField(models.CharField):
def __unicode__(self):
return crypt(super(PasswordCharField,self).__unicode__())
答案 0 :(得分:1)
我仍然不确定你为什么要尝试加密输出上的字段 - 这似乎不太安全,通常的方法(由Django自己的密码字段采用)是在入口和存储上散列数据在数据库上散列版本。
但是,如果你想沿着这条路走下去,仍然没有理由在自定义字段子类上使用__unicode__
。文档中没有任何内容暗示这是Django的任何部分 - 无论是管理员还是其他任何部分 - 用于获取字段的值。事实上,管理员使用完全相同的方法来获取字段的值。
Custom field subclasses在文档中有完整描述,从内容页面链接。如果没有真正理解你想要做什么就很难说,但可能是to_python
方法就是你所需要的。请记住,这会影响Django中所有使用字段的值。