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
строкой.