Использование оператора «in» в шаблоне Django не работает должным образом - PullRequest
0 голосов
/ 15 ноября 2018

Могу действительно использовать справку, чтобы выяснить, что я неправильно понимаю в следующем: я использую встроенный оператор "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.

Из документов itПохоже, это должно быть относительно простым делом.Может кто-нибудь сказать мне, где я иду не так или что я неправильно понимаю, как работают эти операторы?

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что лучше решить, находится ли пользователь на доске или нет в представлении, а не в шаблоне.

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, и он не будет работать, потому что пользователь - это пользователь экземпляр модели и boardmemebers_list это набор запросов BoardMember модели, где пользователь - просто поле этой модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...