您好我需要在其余框架将其发送到客户端之前修改一些数据。发送的数据来自模型对象。
这是我模型的代码示例。
class UserOptions(models.Model):
options = models.TextField(null=False, null=True)
现在,当客户端请求特定用户选项时,我需要通过将2-3个其他模型中的元素组合添加到一个大的JSON字符串中来修改选项。我怎么能做到这一点,我假设通过串行器,但我不确定如何相应地专门修改请求的字段。
答案 0 :(得分:2)
如果您希望只返回此数据,可以使用自定义SerializerMethodField
来完成此操作,这将允许您汇总所需的所有数据,然后传递回到API响应中。
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来完成此操作。