【发布时间】:2020-02-21 11:50:50
【问题描述】:
在我制作的 django 中,用户可以互相关注并获得他们关注的用户的帖子。我现在想实现一个阻止系统,这样任何用户都可以阻止另一个用户,并且被阻止的用户无法看到阻止他们的用户的个人资料或帖子
我的models.py:
class post(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='post_pics', null=True, blank=True)
video = models.FileField(upload_to='post_videos', null=True, blank=True)
content = models.TextField()
likes = models.ManyToManyField(User, related_name='likes', blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
objects = postManager()
def __str__(self):
return self.title
class Meta:
ordering = ['-date_posted', 'title']
def get_absolute_url(self):
return reverse ('blog-home')
def total_likes(self):
return self.likes.count()
class UserProfileManager(models.Manager):
use_for_related_fields = True
def all(self):
qs = self.get_queryset().all()
try:
if self.instance:
qs = qs.exclude(user=self.instance)
except:
pass
return qs
def toggle_follow(self, user, to_toggle_user):
user_profile, created = UserProfile.objects.get_or_create(user=user)
if to_toggle_user in user_profile.following.all():
user_profile.following.remove(to_toggle_user)
added = False
else:
user_profile.following.add(to_toggle_user)
added = True
return added
def is_following(self, user, followed_by_user):
user_profile, created = UserProfile.objects.get_or_create(user=user)
if created:
return False
if followed_by_user in user_profile.following.all():
return True
return False
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='owner', on_delete=models.CASCADE)
following = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='followed_by')
objects = UserProfileManager()
def __str__(self):
return str(self.following.all().count())
def get_following(self):
users = self.following.all()
return users.exclude(username=self.user.username)
【问题讨论】:
-
先生,您能帮我解决这个问题吗? @TheGoldKnight23
-
我觉得你要求代码为你做这件事,这不是 SO 的目的。我会尝试自己解决问题,然后返回“为什么这不起作用”的具体问题
-
不,先生,我只是不问代码,我只是想知道。我将为每个用户自己制作一个阻止列表,我在询问我如何才能获得真正的阻止功能,比如如果我阻止你,我将找不到你,也不会像其他社交媒体那样获得帖子。 @TheGoldKnight23
标签: django django-models django-rest-framework django-views