holyredbeard
holyredbeard

Reputation: 21238

Check if user is a member

In my project management app I have a page that lists all the projects, however I want to show whether a project is owned by the user, if the user is a member of the project or if neither of them. This I do by the following code in the template:

...
{% load custom_filters %}
...

{% for project in projects %}
    {% if project|ownership:user %}
        <div class="users_project label label-info">
            Admin
        </div>
        <a href="{% url show_project project.id %}">{{ project }}</a><br/>
    {% else %}
        {% if project|membership:user %}
            <div class="users_project label label-success">
                Member
            </div>
            <a href="{% url show_project project.id %}">{{ project }}</a><br/>
        {% else %}
                <div class="users_project label label-error">
        Not member
        </div>
            <a href="{% url show_project project.id %}">{{ project }}</a><br/>
        {% endif %}
    {% endif %}
{% endfor %}

The first custom filter used here (project|ownership) works as supposed:

@register.filter(name='ownership')
def ownership(project, user):
    return project.added_by_user == user

...but as for the other (project|membership) I need help.

@register.filter(name='membership')
def membership(project, user):
    return ?

The models "User" and "Project" has a many-to-many relationship:

class Project(models.Model):
... other fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')

...which has resulted in a table in the db that's called "project_users", which contains of the following fields:

project_id (INT)
user_id    (INT)

Upvotes: 0

Views: 55

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599778

You can query a ManyToMany field directly:

project.users.filter(id=user.id).exists()

This will return a boolean showing whether or not that user record is contained in the list of users.

Upvotes: 1

Related Questions