首页 文章

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

提问于
浏览
1

假设我有一个类似的模型

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}' 或传递手动构建的字符串 . 他们宁愿能够单独将 XY 传递给API .

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

1 回答

  • 3

    如果你不想让你的串行器成为一个ModelSerializer(你可能已经意识到这一点,但我知道我一开始没有),你可以继承serializers.Serializer,你想要的字段 . 就像是

    class MyModelSerializer(serializers.Serializer):
        x = serializers.IntegerField()
        y = serializers.IntegerField()
    

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

相关问题