2016-06-21 16 views
5

DRF'ye yeni geldim ve bir API oluşturmaya yeni başladım.Django Rest Framework: GET isteğinin yanıtına özel alan nasıl eklenir?

Shop adlı bir modelim var. Ve iki kullanıcı farklı kullanıcı türüm var: Müşteri ve Tedarikçi.

  1. Ben isteği ve ilgili dükkanı gönderildiğinde Müşteri arasındaki mesafeyi temsil GET isteği /dükkan/id/, yanıtında için özel bir alan mesafe eklemek istiyorum.
  2. Yöntemin değeri yalnızca nesnenin kendisine bağlı olmadığından, SerializerMethodField kullanamıyorum.
  3. Tüm GET istekleri için bu özel alanı eklemek istemiyorum, bunun yerine, isteği gönderen kullanıcının bir Müşteri olduğunu eklemeliyim.

Yukarıdaki kısıtları göz önünde bulundurarak, özel alanı isteğin yanıtına nasıl eklemeliyim? Bunu yapmanın en iyi yolu nedir?

+0

Değer başka nelerden kaynaklanıyor? –

+0

Mesafe değeri, mağazanın konumuna ve müşterinin bulunduğu yere bağlıdır. – hnroot

cevap

5

distanceSerializerMethodField tanımlayabilir ve seri kullanıcı izleyicisi context'u kullanarak geçerli kullanıcı konumuna erişebilirsiniz. Daha sonra mevcut kullanıcı konumunu ve dükkanın yerini kullanarak mesafeyi hesaplayın.

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

Hem GET hem de POST için ne olacak? POST için create() yöntemini geçersiz kılarak yapılabilir, ancak GET için ne yapılabilir? –

+0

@MahabuburRahamanMelon Hem GET (geri alma) hem de POST (oluştur) yöntemleri için çalışmalıdır. –

İlgili konular