Сериализация таблицы 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']
Вернуться на верх