Сериализация таблицы Post, которая имеет таблицу Like, связанную с ней через Fk
hi, поскольку я просто новичок в DRF, мне нужна ваша помощь в сериализации таблицы Post.
У меня есть модель Post следующего вида :
class Post(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
title = models.CharField(max_length=255)
descripotion = models.TextField(blank=True)
link = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.title
Есть еще модель Like Model, которая связана с Post model by FK
class Like(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
post= models.ForeignKey(
'Post',
on_delete=models.CASCADE
)
def __str__(self):
return self.id
а это мой serializers.py для таблицы Post
class PostSerializers(serializers.ModelSerializer):
user = UserSerializer( required = False )
class Meta:
model = Post
fields = [
'id', 'title', 'link','user','descripotion']
read_only_fields = ['id']
возвращается следующий ответ
{
"id": 5,
"title": "string",
"link": "string",
"user": {
"email": "admin@mail.com",
"name": "sia"
},
"descripotion": "string"
}
Но я хочу, чтобы в ответе было количество Like
{
"id": 5,
"title": "string",
"link": "string",
"user": {
"email": "admin@mail.com",
"name": "sia"
},
"descripotion": "string",
"like_count": 50
}
Как я должен изменить сериализатор, чтобы достичь этой цели?
Вы можете определить новое вызываемое поле с методом как поле сериализатора:
class PostSerializers(serializers.ModelSerializer):
user = UserSerializer(required=False)
like_count = serializers.SerializerMethodField('get_likes_count')
def get_likes_count(self, obj: Post) -> int:
"""
This function is called by the SerializerMethodField.
"""
return obj.like_set.all().count()
class Meta:
model = Post
fields = ['id', 'title', 'link','user','descripotion', 'like_count']
read_only_fields = ['id']