2013-03-04 98 views
0

在我的项目管理应用程序中,我有一个列出所有项目的页面,但是我想显示项目是否由用户拥有,如果用户是项目成员,或者两者都不是其中。这是我用下面的代码做模板:检查用户是否是会员

... 
{% 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') 

...这导致在一个数据库中的表这就是所谓的“project_users”它包含以下字段:

project_id (INT) 
user_id (INT) 

回答

1

您可以直接查询一个多对多场:

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

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