Django: В шаблонах использование оператора if внутри цикла for в _set.all не работает. почему?

Если у вас есть лучший способ переформулировать мой вопрос, пожалуйста, дайте мне знать. Мой шаблон выглядит следующим образом:

{% for x in group.groupmember_set.all %}

  {% if x.user != user.username %}

    {{ x.user }}

  {% endif %}

{% endfor %}

Это утверждение печатает всех пользователей в группе, как будто утверждение if не существует. Если я уберу оператор if, в конечном итоге выводится то же самое и имеет смысл... Я хочу отфильтровать user.username с помощью оператора if, но не получается. Что не так? Группа имеет отношение ManytoMany с пользователем через GroupMember. Мой models.py файл гласит:

class Group(models.Model):
    name = models.CharField(max_length=255, unique=True)
    members = models.ManyToManyField(User,through="GroupMember")

class GroupMember(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,)
    group = models.ForeignKey(Group,on_delete=models.CASCADE,)
    is_valid = models.BooleanField(default=False)

и в views.py я использую DetailView, например,

class SingleGroup(DetailView):
    model = Group

Если вы не задали переменную user в шаблоне и не передали ее в контексте представления, то следует использовать request.user. Измените его следующим образом:

{% for x in group.groupmember_set.all %}

  {% if x.user != request.user %}

    {{ x.user }}

  {% endif %}

{% endfor %}

Другая вещь - вы должны сравнивать объекты одного типа, то есть User объект с User объектом или username строку с username строкой - определенно не User объект с username строкой.

Вернуться на верх