Here I have a serializer and in that serializer is a get_is_liked
method.
This method is going to return a boolean, wheter the post has liked by the current user or not.
Now, I want to get the result of this method in the format of a json attribute like other fields. There's suppose to be a mobile application that sends request for the logged in user to show if the post has liked before or not.
serializer.py
class BookSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(slug_field='username', read_only=True)
class Meta:
fields = (
'id',
'name',
'description',
'user',
'likes'
)
model = models.Book
def get_is_liked(self, obj):
requestUser = self.context['request'].user
return models.BookLike.objects.filter(
book=obj,
liker=requestUser
).exists()
views.py
class ListBookView(generics.ListCreateAPIView):
permission_classes = (IsAuthenticated, )
queryset = models.Book.objects.all()
serializer_class = serializers.BookSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class DetailBookView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = (IsOwnerOrReadOnly, )
queryset = models.Book.objects.all()
serializer_class = serializers.BookSerializer
EDITED:
models.py
class Book(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=125)
description = models.CharField(max_length=225)
likes = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
class BookLike(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
liker = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return 'Post: {0}, Liked by {1}'.format(self.book, self.liker)
Now, I don't know how to do it?!