Django Rest Framework:如何在GET请求的响应中添加自定义字段?

时间:2016-06-21 11:35:40

标签: python django django-rest-framework

我是DRF的新手,刚刚开始构建API。

我有一个名为购物的模型。 我有两种用户不同的用户类型:客户供应商

  1. 我想在GET请求 / shops / id / 的响应中添加自定义字段距离,它表示提交请求的客户之间的距离和相应的商店。
  2. 我认为我不能使用 SerializerMethodField ,因为该方法的值不仅取决于对象本身。
  3. 我不想为所有GET请求添加此自定义字段,而是在提交请求的用户是客户时,我需要添加它。
  4. 考虑到上述限制,我应该如何将自定义字段添加到请求的响应中?最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

您可以定义distance ticket #809,然后使用序列化工具context访问当前用户位置。然后使用当前用户位置和商店位置计算距离。

class ShopSerializer(serializers.ModelSerializer):

    distance = serializers.SerializerMethodField()

    class Meta:
        model = Shop
        fields = (.., 'distance')

    def get_distance(self, obj):
        current_user = self.context['request'].user # access current user    
        user_location = current_user.location

        distance = <compute distance using obj.location and user_location>
        return distance