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

DRF: JSONField in serializers with TextField in models cause stringification

我正在使用 python 2.7.11

假设有一个模型 Game,它有一个应该存储 json 值的 TextField。选择 TextField 是因为数据库与本身不支持 postgres JSONb 的休眠 ORM 共享。因此我有:

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 对象返回?

您可以尝试类似的方法:

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")