之前,我有一個這樣的模型類:Django1.1模型字段值預處理返回
class Note(models.Model):
author = models.ForeignKey(User, related_name='notes')
content = NoteContentField(max_length=256)
NoteContentField是一個自定義子類CharField的是覆蓋to_python方法的目的做一些Twitter文本轉換處理。
class NoteContentField(models.CharField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
value = super(NoteContentField, self).to_python(value)
from ..utils import linkify
return mark_safe(linkify(value))
但是,這不起作用。
當我保存注意對象是這樣的:
note = Note(author=request.use,
content=form.cleaned_data['content'])
note.save()
的交談值保存到數據庫中,這不是我想看到的。
我想要做的是將原始內容保存到數據庫中,並且只在稍後訪問內容屬性時進行轉換。
你能告訴我這有什麼問題嗎?
感謝皮埃爾和丹尼爾。
我已經知道了什麼是錯的。
我想文本轉換代碼應該也在to_python或get_db_prep_value,這是錯誤的。
我應該重寫他們兩個,讓to_python進行轉換和get_db_prep_value返回unconversed值:
from ..utils import linkify
class NoteContentField(models.CharField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
self._raw_value = super(NoteContentField, self).to_python(value)
return mark_safe(linkify(self._raw_value))
def get_db_prep_value(self, value):
return self._raw_value
我不知道是否有實現這個更好的辦法?
謝謝。你的意思是我必須同時定義to_python和get_db_prep_value來完成這個工作嗎?如果是這樣,get_db_prep_value方法應該是什麼? – satoru 2010-04-04 12:17:11
你是對的,丹尼爾。這是一個恥辱,我沒有耐心閱讀手冊:( – satoru 2010-04-04 12:33:42