假设我有一个类似的模型
class MyModel(models.Model):
kwargs = models.TextField()
其中 kwargs
字段通常是JSON字符串,表示关键字参数的字典,例如 '{"X": 1, "Y": 2}'
. 它's not practical to modify this model, as it'是属于第三方应用程序的模型,修改字段可能需要在代码中进行fork和其他更改 .
现在,我正在使用 django-rest-framework
提供和 endpoints 来创建/更新/列出/删除 MyModel
的实例,我有一个类似于的序列化器:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('kwargs',)
为此提供便利 . 这一切都可行,但由于各种原因,用户不希望手动输入kwargs的JSON转储字符串,即在文本框中手动输入 '{"X": 1, "Y": 2}'
或传递手动构建的字符串 . 他们宁愿能够单独将 X
和 Y
传递给API .
如何使用序列化器实现此目的?换句话说,如何创建具有提供给用户的非模型字段的序列化程序,但是在update / create上将其转储/组合成JSON字符串并相应地映射到 kwargs
模型实例字段 .
1 回答
如果你不想让你的串行器成为一个ModelSerializer(你可能已经意识到这一点,但我知道我一开始没有),你可以继承serializers.Serializer,你想要的字段 . 就像是
然后,您只需设置视图即可使用此序列化程序,从中获取数据并在视图中创建/更新模型 .