假设我有一个类似
的模型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}'
或传递手动构建串。他们宁愿能够单独将X
和Y
传递给API。
如何使用序列化程序实现此目的?换句话说,如何创建具有提供给用户的非模型字段的序列化程序,但是在update / create上将其转储/组合成JSON字符串并相应地映射到kwargs
模型实例字段。
答案 0 :(得分:3)
如果你不想要(或许你已经意识到这一点,但我知道我一开始并没有),你不必让你的序列化器成为ModelSerializer,你可以继承自serializers.Serializer,包含您想要的字段。像
这样的东西class MyModelSerializer(serializers.Serializer):
x = serializers.IntegerField()
y = serializers.IntegerField()
然后,您只需设置视图即可使用此序列化程序,从中获取数据并在视图中创建/更新模型。