如何修改模型字段,然后使用Python / Django中的Rest Framework发送它?

时间:2015-01-12 19:51:29

标签: python django django-models django-rest-framework

您好我需要在其余框架将其发送到客户端之前修改一些数据。发送的数据来自模型对象。

这是我模型的代码示例。

class UserOptions(models.Model):
    options = models.TextField(null=False, null=True)

现在,当客户端请求特定用户选项时,我需要通过将2-3个其他模型中的元素组合添加到一个大的JSON字符串中来修改选项。我怎么能做到这一点,我假设通过串行器,但我不确定如何相应地专门修改请求的字段。

1 个答案:

答案 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来完成此操作。