如何在django项目上实现一个follow sistem
How to implement a follow sistem on django project
我正在做一个 django 项目,想在其中实现一个 following/follower 系统,目前我有一个朋友的系统,顺便说一句,它根本不起作用,但我只想知道我是如何工作的可以写那个代码,想法是在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)
我想对您的模型执行以下操作。添加 following = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True, null=True)
以便一个配置文件可以关注另一个配置文件并被关注。
有了这个,您可以轻松获取关注的个人资料和某个个人资料的关注者。 ManyToManyField
的'self'
参数声明的是递归关系,而symmetrical=False
声明的是反向关系不同,意思是我关注你,你不关注我。
要添加(关注)另一个个人资料,您只需 profile.following.add(another_profile)
, and for removal (unfollow) you can do this 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)
我正在做一个 django 项目,想在其中实现一个 following/follower 系统,目前我有一个朋友的系统,顺便说一句,它根本不起作用,但我只想知道我是如何工作的可以写那个代码,想法是在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)
我想对您的模型执行以下操作。添加 following = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True, null=True)
以便一个配置文件可以关注另一个配置文件并被关注。
有了这个,您可以轻松获取关注的个人资料和某个个人资料的关注者。 ManyToManyField
的'self'
参数声明的是递归关系,而symmetrical=False
声明的是反向关系不同,意思是我关注你,你不关注我。
要添加(关注)另一个个人资料,您只需 profile.following.add(another_profile)
, and for removal (unfollow) you can do this 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)