ManyToMany 字段未显示在模板中的 if 语句中

ManyToMany fields are not showing in if statement in template

我正在构建一个 BlogApp,但遇到了一个问题。

我正在尝试做什么:-

我正在尝试在 two many fields 的模板中使用 if statement,但是 if 语句无法正常工作。

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
    friends = models.ManyToManyField("Profile",blank=True)

class Post(models.Model):
    post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
    viewers = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='viewed_posts',editable=False)

views.py

def detail_view(request,pk,slug):
    post = get_object_or_404(Post,pk=pk)

    friend = request.user.profile.friends.all()
    saw = post.viewers.all()

    context = {'friend':friend,'saw':saw}

template.html

{% if request.user.profile.friends.all in post.viewers.all %}

"SHOWING SOME TEXT"

{% endif %}

I am trying to show if request.user friends are in post viewers then show some text.

当我尝试在 if 语句中合并两者后打印一些文本时,它没有显示任何内容。

我不知道错误在哪里。

如有任何帮助,我们将不胜感激。

提前致谢。

问题出在这一行

{% if request.user.profile.friends.all in post.viewers.all %}

更新:

模板可以访问 request.user 对象,但不能访问配置文件对象。您正在尝试在模板中应用 Django ORM 方法,它不会起作用。

def detail_view(request,pk,slug):
    # some code
    profile = Profile.objects.get(user=request.user)
    context = {'profile':profile}
    # more code
    return render(request, template_file, context)

您可以filter在视图中:

def detail_view(request,pk,slug):
    post = get_object_or_404(Post,pk=pk)

    friend = request.user.profile.friends.all()
    saw = post.viewers.all()

    <b>seen_friends = post.viewers.filter(
        id__in=friend.values_list("user_id")
    ).exists()</b>

    context = {
        'friend':friend,'saw':saw, 
        'seen_friends':seen_friends
    }

在template.html中:

{% if seen_friends %}

"SHOWING SOME TEXT"

{% endif %}