首页 > 解决方案 > 如何使块系统双向运行?

问题描述

我意识到阻塞系统存在限制。

基本上基于所讨论的代码,我已经做到了,当我阻止用户时,我将无法在主页提要的详细信息页面中看到他的帖子。我将无法在他的帖子中添加评论或提交任何内容。但后来我意识到,我们阻止的用户仍然可以看到我的帖子、我的详细信息页面,并在我的帖子中添加评论/提交内容。这会破坏阻塞系统的目的。

我怎样才能使从被我屏蔽的人的角度来看,他也无法查看我的帖子、评论我的帖子或向我的帖子提交任何内容?

模型.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)

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


由于您已将 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'))

推荐阅读