【问题标题】:How to implement a follow sistem on django project如何在 django 项目上实现跟随系统
【发布时间】:2020-09-29 22:50:57
【问题描述】:

我正在开发一个 django 项目,并希望在其中实现一个追随者/追随者系统,目前我有一个朋友系统,顺便说一句根本不起作用,但我只想知道如何编写该代码,这个想法是有一个像 instagram 一样的朋友系统。

models.py 文件

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        profile_pic = models.ImageField(upload_to='profile_pics', null=True, blank=True, default='default.png')
        bio = models.CharField(max_length=400, default=1, null=True)

        def __str__(self):
            return f'{self.user.username} Profile'

views.py 文件

    def profile(request, username=None):
        profile, created=Profile.objects.get_or_create(user=request.user)
        if username:
            post_owner = get_object_or_404(User, username=username)
            user_posts = Profile.objects.filter(user_id=post_owner) 
        else:
            post_owner = request.user
            user_posts = Profile.objects.filter(user=request.user)

        args1 = {
            'post_owner': post_owner,
            'user_posts': user_posts,
        }
        return render(request, 'profile.html', args1)

【问题讨论】:

  • 你的模型现在是什么样子的?要求这样的想法是广泛的,Stack Overflow 可能会因为你没有集中注意力而结束你的问题。添加更多详细信息,以便我们为您提供帮助。
  • @BernardoDuarte 我现在就补充。

标签: python django django-models django-views django-database


【解决方案1】:

我会说对您的模型执行以下操作。将following = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True, null=True) 添加到其中,以便一个个人资料可以关注另一个个人资料并被关注。

有了这个,您可以轻松获取以下个人资料和某些个人资料的关注者。 ManyToManyField'self' 参数声明了递归关系,symmetrical=False 声明反向关系不同,这意味着如果我关注你,你就不会关注我。

要添加(关注)另一个配置文件,您只需执行profile.following.add(another_profile),要删除(取消关注)您可以执行此操作profile.following.remove(another_profile)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_pic = models.ImageField(upload_to='profile_pics', null=True, blank=True, default='default.png')
    bio = models.CharField(max_length=400, default=1, null=True)
    following = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True, null=True)

    def __str__(self):
        return f'{self.user.username} Profile'

如何关注

profile = Profile.objects.get(...)
another_profile = Profile.objects.get(...)
profile.following.add(another_profile)

如何取消关注

profile = Profile.objects.get(...)
another_profile = Profile.objects.get(...)
profile.following.remove(another_profile)

【讨论】:

  • 所以我不需要新的追随者模型,对吧?我的个人资料视图会保持不变吗?
  • @JuanMartinZabala 它不应该影响任何 AFAIK。
  • 谢谢!最后一件事,我应该添加什么才能让用户也取消关注已经被关注的用户?
  • @JuanMartinZabala 我在答案中添加了一些用于添加和删除(关注和取消关注)的示例和链接,请查看!
  • @JuanMartinZabala 如果它帮助并解决了您的问题,请不要忘记接受,也许也可以投票。很高兴我能提供帮助;D 如果还有其他问题,只需 ping。
猜你喜欢
  • 2019-11-17
  • 1970-01-01
  • 2014-12-12
  • 2011-12-01
  • 2015-04-16
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多