【发布时间】:2020-12-26 01:36:25
【问题描述】:
假设我使用默认的 django 模型、一个 Post 模型(下面的代码)和一个将用户链接到 Post 的 SavedPost 模型(如果存在具有特定帖子的特定用户,则为该用户保存该帖子)和链接 2 个用户的追随者模型(类似于 SavedPost)。
我想要做什么:一个 API,对于用户来说,他们可以获取他们关注的用户的所有帖子,此外,这些帖子中的每一个都有一个额外的“字段”来说明该帖子是否被保存。
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post_type = models.CharField(max_length=1, choices=[('B', 'Blog'), ('V', 'Video')], default='B')
file_path = models.URLField(null=True)
title = models.CharField(max_length=255)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class SavedPost(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
# A user can save a post only once.
unique_together = ('user', 'post')
class Follower(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follower")
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
# A user can follow another user only once
unique_together = ('user', 'follower')
后序列化器:
class PostSerializer(serializers.ModelSerializer):
"""
Nested serializer for post using SimpleUser and Kingdom.
"""
class Meta:
model = Post
fields = ('id', 'user', 'post_type', 'file_path',
'title', 'description', 'created_at', 'updated_at')
def to_representation(self, instance):
data = super().to_representation(instance)
data['user'] = UserSerializer(
User.objects.get(pk=data['user'])).data
return data
API 视图:
@permission_classes([IsAuthenticated,])
@api_view(['GET'])
def get_following(request):
user = request.user
following = Follower.objects.filter(follower=user).values('user')
# saved_posts = SavedPost.objects.filter(user=user, post__user__in=following).order_by('-post__created_at')
posts = Post.objects.filter(user__in=following).order_by('-created_at')
serializer = PostSerializer(posts, many=True, context={'request': request})
return JsonResponse(serializer.data, safe=False)
到目前为止,通过我所做的视图,我可以获得 request.user 关注的所有帖子,但它没有说明它们是否被保存。我正在寻找在帖子上说“is_saved”布尔值来说明该帖子是否为该用户保存。
对此的任何帮助/方法表示赞赏。谢谢。
【问题讨论】:
-
你能添加
PostSerializer序列化器吗? -
添加了 PostSerializer!
标签: python django api serialization model