检查用户是否是会员

时间:2013-03-04 17:42:35

标签: django django-models many-to-many

在我的项目管理应用程序中,我有一个列出所有项目的页面,但是我想要显示项目是否由用户拥有,用户是项目的成员还是两者都没有。我通过模板中的以下代码来完成:

...
{% 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 %}

此处使用的第一个自定义过滤器(项目|所有权)按预期工作:

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

...但是对于其他(项目|会员)我需要帮助。

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

模型“用户”和“项目”具有多对多关系:

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

...这导致db中的一个名为“project_users”的表,其中包含以下字段:

project_id (INT)
user_id    (INT)

1 个答案:

答案 0 :(得分:1)

您可以直接查询ManyToMany字段:

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

这将返回一个布尔值,显示该用户记录是否包含在用户列表中。