If you have a better way to reformulate my question please let me know. My template is as follows:
{% for x in group.groupmember_set.all %}
{% if x.user != user.username %}
{{ x.user }}
{% endif %}
{% endfor %}
This statement prints all users in the Group, as though the if statement doesn't exist. If I remove the if statement, eventually prints the same and makes sense... I want to filter out user.username with an if statement but doesn't work. What is wrong? Group has a ManytoMany relation with User through GroupMember.
My models.py file reads:
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)
and in views.py I use DetailView, e.g.,
class SingleGroup(DetailView):
model = Group
CodePudding user response:
If you haven't set user variable in template nor passed it in view's context, then you should use request.user. Change it like that:
{% for x in group.groupmember_set.all %}
{% if x.user != request.user %}
{{ x.user }}
{% endif %}
{% endfor %}
Another thing is you should compare object of the same type, ie. User object to User object or username string to username string - definitely not User object to username string.
