我有一个这样的模型类:
class Note(models.Model):
author = models.ForeignKey(User, related_name='notes')
content = NoteContentField(max_length=256)
注释内容字段
是的自定义子类
查菲尔德
它覆盖了
巨蜥
方法进行一些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 = Note(author=request.use,
content=form.cleaned_data['content'])
note.save()
转换后的值被保存到数据库中,这不是我想看到的。
我要做的是将原始内容保存到数据库中,并且仅在稍后访问内容属性时进行转换。
你能告诉我这是怎么回事吗?
多亏了皮埃尔和丹尼尔。
我知道怎么了。
我认为文本转换代码应该在
巨蜥
或
获取\u db \u准备\u值
那就错了。
我应该重写这两个参数,让to_python进行转换,并获取_db_prep_值返回未经转换的值:
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
我想知道是否有更好的方法来实现这一点?