代码之家  ›  专栏  ›  技术社区  ›  satoru

django1.1返回前模型字段值预处理

  •  1
  • satoru  · 技术社区  · 15 年前

    我有一个这样的模型类:

    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
    

    我想知道是否有更好的方法来实现这一点?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Daniel Roseman    15 年前

    你好像只看了一半的文件。正如Pierre Jean上面提到的,甚至将您链接到文档的正确部分,您需要定义反向函数,即 get_db_prep_value .

        2
  •  1
  •   Pierre-Jean Coudert    15 年前

    我认为你应该提供反向函数 巨蜥 .

    请看一下Django医生: Converting Python objects to query value