2014-06-15 24 views
16

gider işte bunun için doğru google arama bulmak için görünmüyor:Django serileştiricisi Yöntemi Alanı

benim serileştiriciye bir alan vardır: tüm ilgili alan sayar

likescount = serializers.IntegerField(source='post.count', read_only=True) 

hangi " post".

def popularity(self, obj): 
     like = self.likescount 
      time = datetime.datetime.now() 
      return like/time 

bu mümkün mü:

Şimdi benim yönteminin bir parçası olarak bu alan kullanmak istiyor? post.count varsayarak

+1

nereye İkinci yöntem geliyor? ('popular''), bu yüzden verilere erişmek istediğiniz yer neresidir? –

+0

Sağ "likescount" @DenisCornehl olduğu serileştirici sınıf içinde –

cevap

36

bir yayındaki beğenme sayısını ölçmek için kullanılıyor ve gerçekte popülerlik yönteminde bir zaman damgasıyla bir tamsayı bölmek niyetinde değilim, o zaman bu deneyin:

bir SerializerMethodField

kullanmak
likescount = serializers.SerializerMethodField('get_popularity') 

def popularity(self, obj): 
    likes = obj.post.count 
    time = #hours since created 
    return likes/time if time > 0 else likes 

Ben Modelinizdeki Modelinizdeki

bu bir mülk yapma öneriyoruz ancak:

@property 
def popularity(self): 
    likes = self.post.count 
    time = #hours since created 
    return likes/time if time > 0 else likes 

ardından serileştiriciye referans olarak kullanmak için bir jenerik Field kullanın:

class ListingSerializer(serializers.ModelSerializer): 
    ... 
    popularity = serializers.Field(source='popularity') 
+1

Hey aynı uygulamaya ancak aşağıdaki hata var:/API/tarifler de 'AssertionError//' 2 'Saha (okunabilen = True) ReadOnlyField' – Amit

+0

olmalıdır İkinci seçenek, alanın salt okunur olmaması durumunda geçerli veya daha iyi olanıdır, eğer biliniyorsa CharField ile veya herhangi bir türle çalışır ... – danigosa

+1

İkinci durumda, değişken adı ve kaynağı aynı (popülerlik) olduğundan fazlalık nedeniyle bir 'AssertionError 'olsun. Benim durumumda, ihtiyacım olan şeyden beri bir ReadOnlyField kullandım. – guival

İlgili konular