【发布时间】:2019-05-28 14:42:35
【问题描述】:
这里我有一个序列化程序,其中的序列化程序是一个get_is_liked 方法。
此方法将返回一个布尔值,无论帖子是否被当前用户喜欢。
现在,我想像其他字段一样以 json 属性的格式获取此方法的结果。 假设有一个移动应用程序向登录用户发送请求,以显示该帖子之前是否喜欢过。
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
已编辑:
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)
现在,我不知道该怎么做?!
【问题讨论】:
标签: python django-models django-rest-framework django-serializer