Can't seem to find the right google search for this so here it goes:
I have a field in my serializer:
likescount = serializers.IntegerField(source='post.count', read_only=True)
which counts all the related field "post".
Now I want to use that field as part of my method:
def popularity(self, obj): like = self.likescount time = datetime.datetime.now() return like/time
Is this possible?
Each field in a Form class is responsible not only for validating data, but also for "cleaning" it — normalizing it to a consistent format. — Django documentation. Serializer fields handle converting between primitive values and internal datatypes.
By default it is set to False. Setting it to True will allow you to mark the field as optional during "serialization". Note: required property is used for deserialization.
Any 'read_only' fields that are incorrectly included in the serializer input will be ignored. Set this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization.
to_representation(self, value) method. This method takes the target of the field as the value argument, and should return the representation that should be used to serialize the target. The value argument will typically be a model instance.
assuming post.count
is being used to measure the number of likes on a post and you don't actually intend to divide an integer by a timestamp in your popularity method, then try this:
use a 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
however I would recommend making this a property in your model
in your model:
@property def popularity(self): likes = self.post.count time = #hours since created return likes / time if time > 0 else likes
then use a generic Field to reference it in your serializer:
class ListingSerializer(serializers.ModelSerializer): ... popularity = serializers.Field(source='popularity')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With