Home > Blockchain >  Django: In templates using an if statement inside a for loop of _set.all doesn't work. why?
Django: In templates using an if statement inside a for loop of _set.all doesn't work. why?

Time:10-21

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.

  • Related