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?
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')