web-dev-qa-db-fra.com

Django Champ de méthode du sérialiseur

Impossible de trouver la bonne recherche Google pour cela, alors voici:

J'ai un champ dans mon sérialiseur:

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

qui compte tout le champ connexe "poste".

Maintenant, je veux utiliser ce champ dans le cadre de ma méthode:

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

Est-ce possible?

26
John D

en supposant post.count est utilisé pour mesurer le nombre de likes sur un post et vous n'avez pas réellement l'intention de diviser un entier par un horodatage dans votre méthode de popularité, puis essayez ceci:

utilisez un 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

mais je recommanderais d'en faire une propriété dans votre modèle

dans votre modèle:

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

puis utilisez un générique Field pour le référencer dans votre sérialiseur:

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