真的可以使用帮助找出我对以下方面的误解:我正在使用内置的“ 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看来,这应该是一件相对简单的事情。谁能告诉我我哪里出问题了,或者我对这些操作员的工作方式有什么误解?
答案 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 模型的查询集,其中用户只是该模型的一个字段。