Django序列化器方法字段
我找不到合适的谷歌搜索,所以就直接问了:
我在我的序列化器里有一个字段:
likescount = serializers.IntegerField(source='post.count', read_only=True)
这个字段是用来计算所有相关的“帖子”。
现在我想把这个字段用在我的一个方法里:
def popularity(self, obj):
like = self.likescount
time = datetime.datetime.now()
return like/time
这样做可以吗?
1 个回答
93
假设 post.count
是用来计算帖子点赞数量的,并且你其实不打算在你的受欢迎程度方法中把一个整数和时间戳相除,那么你可以试试这个方法:
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')