gpt4 book ai didi

django - 如何用django模型制作follower-following系统

转载 作者:行者123 更新时间:2023-12-02 09:38:58 25 4
gpt4 key购买 nike

我是一名学习django Rest框架的学生

我正在使用 django Rest 框架制作一个简单的 sns

我需要关注者跟踪系统。所以,我尝试去做,但遇到了一些麻烦

首先,这是我的带有 AbstractBaseUser 和 PermissionsMixin 的用户模型

class User(AbstractBaseUser, PermissionsMixin):
user_id = models.CharField(max_length=100, unique=True, primary_key=True)
name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
is_staff = models.BooleanField(default=False)
followers = models.ManyToManyField('self', related_name='follower',blank=True)
following = models.ManyToManyField('self', related_name='following',blank=True)
profile_image = models.ImageField(blank=True)

现场关注者是关注我的人,关注是我关注的人

当我使用此 APIView 类添加以下内容时

class AddFollower(APIView):
permission_classes = [IsAuthenticated, ]
def post(self, requset, format=None):
user = User.objects.get(user_id=self.request.data.get('user_id'))
follow = User.objects.get(user_id=self.request.data.get('follow'))
user.following.add(follow)
user.save()
follow.followers.add(user)
follow.save()
print(str(user) + ", " + str(follow))
return JsonResponse({'status':status.HTTP_200_OK, 'data':"", 'message':"follow"+str(follow.user_id)})

user_id是我,follow是我想关注的人

我想将关注添加到 user_id 的关注字段,并将 user_id 添加到关注的关注者字段

但是不起作用

我想要的结果是这样的(带有用户信息api)

{
"followers": [],
"following": [
"some user"
],
}

部分用户的用户信息

{
"followers": [
"user above"
],
"following": [
],
}

但是真实的结果是这样的

{      
"followers": [
"some user"
],
"following": [
"some user"
],
}

部分用户的用户信息

{
"followers": [
"user above"
],
"following": [
"user above"
],
}

这不是我想要的

我不知道这个问题,我需要一些帮助

谢谢

最佳答案

我会以不同的方式设计它。

我不会将信息添加到 User 模型中,而是显式创建另一个表来存储有关“关注者”和“关注者”的信息。

表的架构为:

class UserFollowing(models.Model):
user_id = models.ForeignKey("User", related_name="following")

following_user_id = models.ForeignKey("User", related_name="followers")

# You can even add info about when user started following
created = models.DateTimeField(auto_now_add=True)

现在,在您的 post 方法实现中,您只需执行以下操作:

UserFollowing.objects.create(user_id=user.id,
following_user_id=follow.id)

然后,您可以轻松访问关注者和关注者:

user = User.objects.get(id=1) # it is just example with id 1
user.following.all()
user.followers.all()

然后您可以创建约束,以便用户不能两次关注同一用户。但我把这个留给你(提示:unique_together)

关于django - 如何用django模型制作follower-following系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58794639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com