DRF:模型中带有TextField的序列化程序中的JSONField会导致字符串化

时间:2016-11-16 10:08:47

标签: django django-rest-framework python-2.x python-unicode

我正在使用python 2.7.11

有一个模型让我们说Game有一个TextField应该存储json值。选择TextField是因为数据库与hibernate ORM共享,本机不支持postgres JSONb。因此我有:

models.py:

@python_2_unicode_compatible
class Game(models.Model):
    settings = models.TextField(default='{}')

serializers.py:

class GameSerializer(serializers.ModelSerializer):
    settings = serializers.JSONField()

有没有一种干净的方法来处理这个问题,在数据库中使用有效的json字符串并通过API将它们作为json对象返回?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

import json

@python_2_unicode_compatible
class Game(models.Model):
    settings = models.TextField(default='{}')

    @property
    def settings_json(self):
        return json.loads(self.settings)

然后在序列化器中:

class GameSerializer(serializers.ModelSerializer):
    settings = serializers.JSONField(source="settings_json")