如何在django项目中实现一个跟随系统?

问题描述 投票:0回答:1

我正在做一个django项目,想在其中实现一个followfollower系统,目前我有一个friend系统,但是我想知道如何写这个代码,我的想法是像instagram一样有一个friend系统。

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)
python django django-models django-views django-database
1个回答
1
投票

我想说的是,在你的模型上做如下操作。添加 following = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True, null=True) 到它,所以一个配置文件可以跟随另一个和被关注。

有了这个功能,你可以很容易地获取关注的资料和某个资料的关注者。这个 'self' 争论 ManyToManyField 声明一个递归关系和 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)
© www.soinside.com 2019 - 2024. All rights reserved.