Django休息框架非模型序列化器

时间:2016-01-04 00:21:45

标签: python django django-rest-framework serializer django-serializer

假设我有一个类似

的模型
class MyModel(models.Model):
    kwargs = models.TextField()

其中kwargs字段通常是JSON字符串,表示关键字参数的字典,例如'{"X": 1, "Y": 2}'。修改此模型是不切实际的,因为它是属于第三方应用程序的模型,修改字段可能需要代码中的fork和其他更改。

现在,我正在使用django-rest-framework提供和端点来创建/更新/列出/删除MyModel的实例,我有一个类似的序列化器:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('kwargs',)

促进这一点。这一切都运行正常,但由于各种原因,用户想要手动输入kwargs的JSON转储字符串,即在文本框中手动输入'{"X": 1, "Y": 2}'或传递手动构建串。他们宁愿能够单独将XY传递给API。

如何使用序列化程序实现此目的?换句话说,如何创建具有提供给用户的非模型字段的序列化程序,但是在update / create上将其转储/组合成JSON字符串并相应地映射到kwargs模型实例字段。

1 个答案:

答案 0 :(得分:3)

如果你不想要(或许你已经意识到这一点,但我知道我一开始并没有),你不必让你的序列化器成为ModelSerializer,你可以继承自serializers.Serializer,包含您想要的字段。像

这样的东西
class MyModelSerializer(serializers.Serializer):
    x = serializers.IntegerField()
    y = serializers.IntegerField()

然后,您只需设置视图即可使用此序列化程序,从中获取数据并在视图中创建/更新模型。