django的SubfieldBase将输入保留为None

时间:2015-08-03 02:48:34

标签: python django django-models

我试图在Django中创建一个将python词典存储为json的字段。

当我这样做的时候:

class DictionaryField(models.TextField):
    def get_db_prep_value(self, value, connection, prepared=False):
        return json.dumps(value)

    def to_python(self, value):
        return json.loads(value)
从数据库中检索到它时,不会调用

to_python。我最终只得到一个字符串。

当我这样做的时候:

class DictionaryField(models.TextField):
    __metaclass__ = models.SubfieldBase

    def get_db_prep_value(self, value, connection, prepared=False):
        return json.dumps(value)

    def to_python(self, value):
        return json.loads(value)
调用

to_python!我最终得到了一个python对象。但是如果我删除已保存在数据库中的模型并尝试重新创建它们,它们最终会变为无!不知怎的,get_db_prep_value停止工作,只返回None或者什么。

我做错了什么?

编辑:

如果我打印输入的'值'传递给get_db_prep_value,然后传递给

__metaclass__ = models.SubfieldBase

存在,'价值'只是没有。没有它,它就是我想要的价值。

1 个答案:

答案 0 :(得分:0)

如果有人好奇,答案是从Django 1.7升级到Django 1.8。

请参阅this related question