2010-08-19 25 views
1

我想用自定義的unicode方法繼承CharField。基本上,我希望能夠在由默認模型字段返回的值上調用我的自定義加密方法。我嘗試了以下內容,但似乎管理員正在以其他方式獲取值。在我看來,這將是實現這一目標的最pythonic方式,但也許我錯了。#django在管理中用什麼方法來表示模型字段

def PasswordCharField(models.CharField): 
    def __unicode__(self): 
     return crypt(super(PasswordCharField,self).__unicode__()) 
+0

爲什麼不直接使用[密碼輸入](http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.PasswordInput)? – 2010-08-19 18:07:05

+0

這不就是一個驗證界面嗎? – Ryan 2010-08-19 18:23:28

+0

你究竟想要加密什麼?管理列表界面中字段的顯示?顯示在更改表單的編輯框中的值?存儲在數據庫中的值? – 2010-08-19 18:25:41

回答

1

我仍然不知道爲什麼你要加密的輸出域 - 它似乎並不十分安全的,通常的做法(由Django自己的密碼字段所)是散列數據在數據庫上輸入和存儲哈希版本。

但是,如果您想沿着這條路線走,仍然沒有理由在自定義字段子類上使用__unicode__。文檔中沒有任何內容暗示這是Django的任何部分 - 無論是管理員還是其他任何部分 - 用於獲取字段的值。實際上,管理員使用完全相同的方法來獲取字段的值。

Custom field subclasses在文檔中有詳細描述,鏈接自內容頁面。如果沒有真正瞭解你想要做什麼,這很難說,但可能是因爲你需要的方法是to_python。請記住,這會影響在Django中使用全部的字段的值。

相關問題