fpg*_*ost 3 python django serialization django-serializer django-rest-framework
假设我有一个像这样的模型
class MyModel(models.Model):
kwargs = models.TextField()
Run Code Online (Sandbox Code Playgroud)
其中kwargs字段通常是 JSON 字符串,表示关键字参数的字典,例如'{"X": 1, "Y": 2}'. 修改此模型是不切实际的,因为它是属于第 3 方应用程序的模型,并且修改该字段可能需要对代码进行分叉和其他更改。
现在,我使用django-rest-framework提供用于创建/更新/列出/删除 的实例的端点MyModel,并且我有一个序列化器,如下所示:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('kwargs',)
Run Code Online (Sandbox Code Playgroud)
以促进这一点。这一切都正常,但由于各种原因,用户不希望手动输入 kwargs 的 JSON 转储字符串,即手动输入'{"X": 1, "Y": 2}'文本框或传递手动构建的字符串。他们宁愿能够单独将X和传递Y给 API。
如何使用序列化器来实现这一点?换句话说,我如何创建一个具有向用户提供的非模型字段的序列化器,但这些字段在更新/创建时转储/组合成 JSON 字符串,并kwargs相应地映射到模型实例字段。
如果您不想,则不必将序列化器设为 ModelSerializer (也许您已经意识到这一点,但我知道我一开始并没有),您可以从serializers.Serializer 继承,并包含您想要的字段。就像是
class MyModelSerializer(serializers.Serializer):
x = serializers.IntegerField()
y = serializers.IntegerField()
Run Code Online (Sandbox Code Playgroud)
然后,您只需设置视图以使用此序列化器,从中获取数据并在视图中创建/更新模型。