django - 如何使块系统双向运行?
问题描述
我意识到阻塞系统存在限制。
基本上基于所讨论的代码,我已经做到了,当我阻止用户时,我将无法在主页提要的详细信息页面中看到他的帖子。我将无法在他的帖子中添加评论或提交任何内容。但后来我意识到,我们阻止的用户仍然可以看到我的帖子、我的详细信息页面,并在我的帖子中添加评论/提交内容。这会破坏阻塞系统的目的。
我怎样才能使从被我屏蔽的人的角度来看,他也无法查看我的帖子、评论我的帖子或向我的帖子提交任何内容?
模型.py
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
blocked_users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='blocked_by_user')
views.py 我尝试执行实现块功能的地方
type_of_post = TypeofPostFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user))).order_by('date_updated'))
if blog_post.author in user.blocked_users.all():
return redirect(reverse('HomeFeed:detail', kwargs={'slug': slug}))
if comment.name in comment.post.author.blocked_users.all():
return redirect(reverse('HomeFeed:main'))
块系统的views.py:
def block_user(request, pk):
user = request.user
user_to_block = Account.objects.get(pk=pk)
user.blocked_users.add(user_to_block)
if user_to_block == user:
return HttpResponse("You can't block yourself")
return redirect('account:view', user_id=user_to_block.pk)
解决方案
由于您已将 related_name 设置为blocked_by_user
您可以在此基础上进行过滤:
在您的视图中:
type_of_post = TypeofPostFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user) | Q(author_id__in=request.user.blocked_by_user.all()))).order_by('date_updated'))
if blog_post.author in user.blocked_users.all() or blog_post.author in user.blocked_by_user.all():
return redirect(reverse('HomeFeed:detail', kwargs={'slug': slug}))
if comment.name in comment.post.author.blocked_users.all() or comment.name in comment.post.author.blocked_by_user.all():
return redirect(reverse('HomeFeed:main'))
推荐阅读
- python - Aadhaar 卡正确方向、旋转或翻转图像
- python-3.x - 如何通过python中的boto3禁用MTurk通知设置
- c# - 在 C# Windows 窗体应用程序中滑动图像(Tinder 滑动)
- java - 如何将 ModelList(ArrayList) 从 Adapter 传递给 Activity
- angular - 将 api 响应对象转换为映射
> - arrays - 为什么我的 printf 不打印数组的元素?
- shopify - 我们可以使用 Shopify 请求属性部分 API 添加其他参数吗?
- rust - 在全局静态变量中存储对外部 C 函数的静态函数引用:不匹配的类型:预期的 fn 指针,找到 fn 项
- java - 尝试与 SNS 集成时,Singature 未得到验证(尝试订阅 sns 主题)
- python - Python:在 Tkinter 应用程序中使用从一个函数到另一个函数的变量(文件名)