在Django模板中使用“ in”运算符无法正常工作

时间:2018-11-15 20:14:12

标签: django django-templates

真的可以使用帮助找出我对以下方面的误解:我正在使用内置的“ in”运算符来检查用户(标准用户模型)是否在董事会成员的查询集中。

>

这是董事会成员模型:

class BoardMembers(models.Model):
    board = models.ForeignKey(Board, related_name="memberships", blank=True)
    user = models.ForeignKey(User,related_name='user_boards', blank=True)
    member_role = models.CharField(choices=MEMBER_ROLES, max_length=100, blank=True)

    def __str__(self):
        return self.user.username

这是我正在使用的视图:

class ViewBoard(SelectRelatedMixin, generic.DetailView):
        model = models.Board
        select_related = ("user",)
        template_name = 'board/view_board.html'

def get_context_data(self, **kwargs):
            context = super(ViewBoard, self).get_context_data(**kwargs)
            context['boardmembers_list'] = BoardMembers.objects.filter(board__slug=self.kwargs['slug'])

           return context

这是我正在努力的html部分:

{% if user in boardmembers_list %}

                    <h1>HEY, {{ user.username }}, YOU'RE ALREADY A MEMBER!</h1>

                    {% else %}
<a class="btn btn-primary" href="{% url 'board:join_board' slug=board.slug pk=board.pk %}">Join this Board</a>

                    {% endif %}

我测试了是否可以在模板中单独检索对象,并且用户和boardmembers_list都正确显示。

docs看来,这应该是一件相对简单的事情。谁能告诉我我哪里出问题了,或者我对这些操作员的工作方式有什么误解?

1 个答案:

答案 0 :(得分:0)

我认为最好决定用户是否在视图中,而不是在模板中。

class ViewBoard(SelectRelatedMixin, generic.DetailView):
    ...

    def get_context_data(self, **kwargs):
        board_mem_list = BoardMembers.objects.filter(board__slug=self.kwargs['slug'])
        context = super(ViewBoard, self).get_context_data(**kwargs)
        context['boardmembers_list'] = board_mem_list
        context['user_in_board'] = board_mem_list.filter(user=self.request.user).exists()  # this will check if user is already in boardmemberlist

       return context

在模板中:

{% if user_in_board %}

     <h1>HEY, {{ user.username }}, YOU'RE ALREADY A MEMBER!</h1>

{% else %}
     <a class="btn btn-primary" href="{% url 'board:join_board' slug=board.slug pk=board.pk %}">Join this Board</a>

{% endif %}

您正尝试在user中搜索boardmemebers_list,因为用户 User 模型实例,并且< strong> boardmebers_list 是 BoardMember 模型的查询集,其中用户只是该模型的一个字段。