2016-06-21 38 views
5

我是DRF的新手,剛剛開始構建API。Django Rest Framework:如何將自定義字段添加到GET請求的響應中?

我有一個模型叫。 而我有兩種不同的用戶類型:客戶供應商

  1. 我想距離添加自定義字段的GET請求/店/ ID/,它代表提交請求和相應的商店客戶之間的距離的響應。
  2. 我想我不能使用SerializerMethodField因爲方法的值不僅取決於對象本身。
  3. 我不想爲所有GET請求添加此自定義字段,相反,我需要添加它,當提交請求的用戶是客戶

考慮上面的約束,我應該如何將自定義字段添加到請求的響應中?什麼是最好的方法來做到這一點?

+0

該值還取決於什麼? –

+0

距離值取決於商店的位置和客戶的當前位置。 – hnroot

回答

5

您可以定義一個distanceSerializerMethodField,並使用串行器的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 
+0

對於GET和POST兩種情況怎麼樣?對於POST,可以通過重寫create()方法來完成,但是對於GET來說呢? –

+0

@MahabuburRahamanMelon它應該適用於GET(檢索)和POST(創建)兩種方法。 –

相關問題