Поле метода сериализации Django

Кажется, он не нашел правильного поиска в Google для этого, вот он:

У меня есть поле в моем сериализаторе:

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

который подсчитывает все связанные поля "post".

Теперь я хочу использовать это поле как часть моего метода:

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

Возможно ли это?

Ответы

Ответ 1

Предполагая, что post.count используется для измерения количества понравившихся сообщений, и вы на самом деле не собираетесь разделить целое число на метку времени в своем методе популярности, а затем попробуйте следующее:

используйте SerializerMethodField

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

однако я бы рекомендовал сделать это свойством в вашей модели

в вашей модели:

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

затем используйте общий Field, чтобы ссылаться на него в вашем сериализаторе:

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