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")
我正在使用 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")