你好,在rest框架将数据发送到客户端之前,我需要修改一些数据。正在发送的数据来自模型对象。
这是我的模型的一个代码示例。
class UserOptions(models.Model):
options = models.TextField(null=False, null=True)
现在,当客户端请求特定用户的选项时,我需要修改选项,将2-3个其他模型中的元素组合添加到一个大的JSON字符串中。我假设是通过序列化程序来实现的,但是我不确定如何具体地相应地修改请求字段。
发布于 2015-01-13 08:18:54
如果你只是想返回这些数据,可以通过使用一个自定义的API接口来完成,它将允许你聚合所有你需要的数据,然后在SerializerMethodField
响应中传递回来。
class UserSerializer(serializers.ModelSerializer):
options = serializers.SerializerMethodField()
def get_options(self, obj):
return {
"something": obj.something,
}
另一种选择是覆盖to_native
(DRF 2) / to_representation
(DRF 3),但这完全取决于您需要修改数据的位置和频率。
在任何一种情况下,您都应该使用watch out for N+1 queries,这将不可避免地涉及到跨外键处理数据。
如果您希望自动保存此自定义数据,可以通过覆盖视图上的the perform_create
and perform_update
hooks来实现。
https://stackoverflow.com/questions/27909676
复制相似问题