【发布时间】:2016-04-07 14:19:03
【问题描述】:
假设我有一个类似的模型
class MyModel(models.Model):
kwargs = models.TextField()
kwargs 字段通常是 JSON 字符串,表示关键字参数的字典,例如'{"X": 1, "Y": 2}'。修改此模型是不切实际的,因为它是属于 3rd 方应用程序的模型,修改字段可能需要 fork 和代码中的其他更改。
现在,我正在使用 django-rest-framework 提供和端点来创建/更新/列出/删除 MyModel 的实例,并且我有一个类似的序列化程序:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('kwargs',)
以促进这一点。这一切正常,但由于各种原因,用户不希望手动输入 kwargs 的 JSON 转储字符串,即在文本框中手动输入 '{"X": 1, "Y": 2}' 或传递手动构建的字符串。他们宁愿能够单独将X 和Y 传递给API。
如何使用序列化程序实现这一点?换句话说,我如何创建一个序列化程序,其中包含提供给用户的非模型字段,但在更新/创建时将其转储/组合成 JSON 字符串并相应地映射到 kwargs 模型实例字段。
【问题讨论】:
-
我很困惑。您只有一个字段,恰好是一个文本字段,但您想使用序列化程序根据用户输入构建您的 json?
-
被序列化的模型有一个字段(至少在这个最小的例子中),但我希望序列化有多个字段,例如X, Y 的输入被组合成一个表示 JSON 字典的字符串,然后作为文本存储在模型实例的 kwargs 字段中。
-
您可以创建一个包含所有字段的序列化程序,运行 serializer.is_valid() 并使用 json.dumps() 将经过验证的数据转换为 json。
标签: python django django-rest-framework serialization django-serializer