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

hnr*_*oot 5 python django django-rest-framework

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

我有一个名为Shop的模特.我有两个用户不同的用户类型:客户供应商.

  1. 我想在GET请求/商店/ id /的响应中添加自定义字段距离,该距离表示提交请求的客户与相应商店之间的距离.
  2. 我想我不能使用SerializerMethodField,因为该方法的值不仅取决于对象本身.
  3. 我不想为所有GET请求添加此自定义字段,而是在提交请求的用户是Customer时我需要添加它.

考虑到上述约束,我应该如何将自定义字段添加到请求的响应中?最好的方法是什么?

Rah*_*pta 5

您可以distance SerializerMethodField使用序列化程序定义a ,然后访问当前用户位置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
Run Code Online (Sandbox Code Playgroud)