从 Django 1.4 到 Django 2.1.5:不再调用自定义字段 to_python()

我正在将应用程序从 python 2/Django 1.4 迁移到 python 3/Django 2.1.5。我对自定义 JSON 字段有一个奇怪的行为:


class JSONField(models.TextField):

    """JSONField is a generic textfield that neatly serializes/unserializes

JSON objects seamlessly. Main thingy must be a dict object."""


    def __init__(self, *args, **kwargs):

        if 'default' not in kwargs:

            kwargs['default'] = '{}'

        super().__init__(*args, **kwargs)


    def to_python(self, value):

        """Convert our string value to JSON after we load it from the DB"""

        if not value:

            return {}

        elif isinstance(value, str):

            res = loads(value)

            assert isinstance(res, dict)

            return res

        else:

            return value


    def get_db_prep_save(self, value, connection):

        """Convert our JSON object to a string before we save"""

        if not value:

            return super(JSONField, self).get_db_prep_save("", connection=connection)

        else:

            return super(JSONField, self).get_db_prep_save(dumps(value), connection=connection)

使用 Django 1.4,当我从数据库读取对象时会调用 JSONField.to_python(),但使用 Django 2.1.5 时不会调用:你知道为什么吗?


千巷猫影
浏览 185回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python